7. Oktober 2011

[dotnet] Image korrekt skalieren

Es ist mir aufgefallen, dass zeitweise Bilder, die mittels DrawImageUnscaled gezeichnet werden zeitweise nicht wirklich den tatsächlichen Bildmaßen entsprechen o.O

Nicht immer, einige Bilder werden korrekt gezeichnet, andere nicht?
Folgender Code [C#] sollte ein Bild in seiner ursprünglichen Größe (unscaled) zeichnen:


// Load the image and determine new dimensions
System.Drawing.Image img = System.Drawing.Image.FromFile(srcFilePath);
Size szDimensions = new Size(GetNextPwr2(img.Width), GetNextPwr2(img.Height));
// Create blank canvas
Bitmap resizedImg = new Bitmap(szDimensions.Width, szDimensions.Height);
Graphics gfx = Graphics.FromImage(resizedImg);
// Paste source image on blank canvas, then save it as .png
gfx.DrawImageUnscaled(img, 0, 0);
resizedImg.Save(newFilePath, System.Drawing.Imaging.ImageFormat.Png);


Doch tatsächlich ist das gezeichnete Bild ein wenig größer als die Ursprungsdatei... und verschwommen.

Nun bin ich der Sache mal auf den Grund gegangen und auf Folgendes gestoßen:
The method DrawImageUnscaled doesn't draw the image at the original pizel size, instead it uses the resolution (pixels per inch) of the source and destination images to scale the image so that it's drawn with the same physical dimensions. - Link

Tatsächlich :-o
Abhängig von der Auflösung des Bildes resultiert eine andere Größe beim zeichnen mit DrawImageUnscaled!

Die Lösung sieht folgendermaßen aus:
Anstatt das Bild direkt mit der Grafikmethode unskaliert zu zeichnen,
zeichne ich es nun mit angegebenen Maßen... denen des Bildes :)

Das würde in C# so aussehen:


gfx.DrawImage(img, 0, 0, img.Width, img.Height);



Soooo, damit sind wir wieder einem .net Rätsel auf die Spur gekommen ;)

happy coding
- the incredible Leitman

12. September 2011

und wieder eine..


Verschenkaktion für tutorials.de

tutorials Logo
Wir verschenken wieder IT-Bücher. Alles garantiert ohne Mindestbestellwert und ohne weitere Verpflichtungen. Es fällt nur die Versandpauschale von 3,95€ an, bzw. wenn du weitere Artikel im Wert von19,00€ mitbestellst, liefern wir innerhalb Deutschlands auch noch versandkostenfrei!

Wähle Deinen Wunschtitel für 0,00€:


PHP quick & dirty 

PHP quick & dirty - Workshops für schnelleres Programmieren
In12 Workshops beschreibt der erfahrene Webentwickler Marcus Straßer, wie Sie auch unter Zeitdruck Ihr Ziel erreichen. Anhand einer selbst entwickelten Blogsoftware zeigt der Autor, wie Sie effektiv programmieren und redundante Arbeitsgänge vermeiden.
früher: 30,00€ 
jetzt: 0,00€
VBA mit Access 

VBA mit Access
Neben den wichtigsten Programmiergrundlagen finden Sie hier eine umfangreiche VBA-Referenz und ein Kapitel mit vielen Tipps und Tricks aus der täglichen Praxis, die Ihnen jede Menge Zeit ersparen.
früher: 19,95€ 
jetzt: 0,00€
Frabmanagement

Farbmanagement
In diesem Buch erfahren Sie alle Einzelheiten über den Aufbau und die Architektur anspruchsvoller Internetanwendungen (Rich Internet Applications, RIA) mit MXML und ActionScript 3.0.
früher: 16,90€ 
jetzt: 0,00€

Bonus: Der PHP5 / MySQL5 Bestseller versandkostenfrei!

PHP5 MySQL 5 Bestseller
 Die 3. aktualisierte Auflage des Bestseller!
 Verlagspreis: 30,00€
 Terrashop-Preis: 14,99€

 Bonus für tutorials.de:
 Versandkostenfreie Lieferung
 innerhalb Deutschlands!


Aktion gültig bis Freitag, den 30. September 2011 bzw. solange der Vorrat reicht. Nur ein 0,- € Artikel pro Besteller.