Laden...

DrawImage verzerrt die Auflösung meines Bildes!?

Erstellt von Mr.Ed vor 17 Jahren Letzter Beitrag vor 16 Jahren 4.109 Views
M
Mr.Ed Themenstarter:in
39 Beiträge seit 2006
vor 17 Jahren
DrawImage verzerrt die Auflösung meines Bildes!?

Hallo,
ich hab folgenden Code in meinem Programm der aus einem großen Bild einen kleinen Ausschnitt auswählt und anzeigen soll. Soweit so gut.


            Bitmap test = new Bitmap("karte.jpg");

                Bitmap bmp = new Bitmap(230, 190);
             

                Graphics g = Graphics.FromImage(bmp);

                g.DrawImage(test, 0, 0, new Rectangle(0, 0, 230, 190), GraphicsUnit.Pixel);
       
                g.FillEllipse(Brushes.Red, new Rectangle(110, 90, 10, 10));
                g.Dispose();
                pictureBox1.Image = bmp;
     
                pictureBox1.Refresh();

Prinzipiell wird die Aufgabe erfüllt. Aber das Problem ist das der Bildausschnitt nicht mehr die original pixel Größe besitzt sondern leicht vergrößert dargestellt wird (siehe Dateianhang, einmal das Original Bild und darauf die Form meines Programms). Nur wieso? Ich brauche unbedingt die original Pixel Größe ! Bitte versucht erstmal den Fehler in dem vorhandenen Code zu finden, da ich für den PDA programmiere gibt es nicht alle Code Funktionen. Der Fehler wurde auch in einer Windows Anwendung festgestellt.

Stöhrt Euch nicht an den roten Punkt, den brauch ich für ne andere Funktion. Meine Picture Box ist übrigends fest 230x190 groß, also so groß wie ich auch das Bitmap definiere.

Grüße Mr.Ed

M
16 Beiträge seit 2007
vor 16 Jahren

der effekt könnte durch eine unterschiedliche Auflösung zwischen graphics-object und dem bitmap entstehen...

g.DpiX

bzw. DpiY mit g als Graphics Objekt zeigt dir die Auflösung an, meist liegt die defaultmäßig bei 96, die des Bitmaps aber anders (bei 72?). Einfachste Methode wird denk ich sein, einfach die Auflösung des Bitmaps anzupassen:

testBitmap.SetResolution(96,96);

hatte das Problem auch mal bei nem einfachen GetPixel Test wo ich von ner farbcodierten Deutschlandkarte Einstrahlungswerte brauchte und merkte, dass der Cursor ganz woanders war als er sollte 😉

ps: seh grad deine abmessungen von DrawImage. warum da mit new ein obj und nicht einfach bmp.Width und bmp.Height?

M
Mr.Ed Themenstarter:in
39 Beiträge seit 2006
vor 16 Jahren

Nach etlichen nervigen rumspielen funktioniert es jetzt. Ich habe folgende Zeite:


g.DrawImage(test, 0, 0, new Rectangle(0, 0, 230, 190), GraphicsUnit.Pixel);

ersetzt mit:


g.DrawImage(test, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height), new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height), GraphicsUnit.Pixel);

Warum es jetzt geht versteh ich nicht, aber vielleicht sagt es mir ja einer... 😁

B
1.529 Beiträge seit 2006
vor 16 Jahren

Also ich fand die Idee von moeb1us sehr einleuchtend...