C# - Graphic ohne Skalierung in PictureBox zeichnen

#2574837
Lesenswert?

Hallo Zusammen,

ich moechte eine Bild, das als Graphics in C# vorliegt unskaliert in 
eine Picturebox laden.

Dsa funktioniert. Allerdings wird das Bild skaliert und damit groesser 
angezeigt als ich das will.

Hier der Code dazu:
1
Bitmap bitmap = global::Porsche.Properties.Resources.Bitmap1;
2
Bitmap returnBitmap = new Bitmap(bitmap.Width, bitmap.Height);
3

4
Graphics graphics = Graphics.FromImage(returnBitmap);
5
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
6
graphics.DrawImageUnscaled(bitmap, new Point(0, 0));
7

8
this.pictureBox1.BackgroundImage = returnBitmap;

Ich habe mir nach dem Laden des BackgroundImages schon die Image-Width 
und Height in MessageBoxen anzeigen lassen. Hierbei werden die richtigen 
Werte angezeigt. Aber innerhalb der Picturebox erscheint das Bild 
groesser als es sollte.

BackgroundImageLayout ist auf None!

Hat jemand eine Idee dazu?

Vielen Dank
Matt
#2574921
Lesenswert?

Das Originalbild hat eine Groesse von 360 x 104 Pixel. Die PictureBox 
hat genau die gleiche Groesse. Also eigentlich sollte das Bild genau 
rein passen.
Setze ich das BackgroundImage direkt in den Einstellungen, passt das 
auch, aber setze ich es mit dem Code, erscheint es wie in dem 
angehaengtem Bild.
Angehängte Dateien:
Gast #2575002
Lesenswert?

Darf ich mal fragen, warum du überhaupt mit Graphics Objekten hantierst?
Du könntest doch direkt das Image in das BackgroundImage der PictureBox 
laden? Das macht in deinem Code nicht viel Sinn...

Außerdem: DrawImageUnscaled ist die vollkommen falsche Methode, da diese 
auch physikalische Größen wie die DPI deines Systems einbezieht...
#2575012
Lesenswert?

Der Hintergrund, warum ich mit einer Graphic arbeite ist, dass ich die 
abgebildete Tachonadel in verschiedene Winkel stellen will. Hierfuer 
habe ich Code im Internet gefunden. Als mir dann das Problem mit der 
Skalierung auffiel, habe ich den Code um das Bild zu drehen vorerst 
wieder geloescht.

Ich habe auch schon die Methode "DrawImage" ausprobiert, aber es ergab 
das gleiche Ergebnis!
#2576375
Lesenswert?

Ich habe gerade einen aehnlichen Code ausprobiert, den ich im Internet 
gefunden habe 
(http://code-bude.net/2011/07/12/bilder-rotieren-mit-csharp-bitmap-rotateflip-vs-gdi-graphics/).

Mit diesem Code funktioniert die Geschichte wunderbar. Vielleicht kann 
mir jemand erklaeren, an was dies liegt.
Zum Verstaendnis: Hier ist die Drehung gleich mit dabei, nicht nur das 
reine Zeichnen des Bildes
1
Bitmap bitmap = global::Projekt.Properties.Resources.Bitmap1;
2

3
using (Graphics graphics = Graphics.FromImage(bitmap))
4
{
5
   graphics.TranslateTransform((float)bitmap.Width / 2, (float)bitmap.Height / 2);
6
   graphics.RotateTransform(Rpm/(33 + 1/3) - 45.0F);
7
   graphics.TranslateTransform(-(float)bitmap.Width / 2, -(float)bitmap.Height / 2);
8
   graphics.DrawImage(bitmap, new Point(0, 0));
9
}
10

11
this.pictureBox1.Image = bitmap;


Vielen Danke fuer Eure Tipps!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren