TImage -> DPI wird automatisch auf 96 gesetzt - soll 300 sein.
-
Hallo ^^,
ich möchte eine vorliegende BMP-Datei (300 dpi) auf einen 600x600 px großen weißen Hintergrund zeichnen und zentrieren, und dann als JPEG-Datei abspeichern.
Im grunde funktioniert das ganze sehr gut, nur setzt er automatisch die dpi-Größe auf 96 Pixel!
Kann ich dem irgendwie entgegen wirken? Oder kennt vielleicht einer ne Klasse, bei welcher die dpi-Größe unberührt bleibt?

Hier mein Code:
// Benötigte Images erstellen TImage * img1 = new TImage(NULL); TImage * img2 = new TImage(NULL); img2->Width = 600; // Breite des 1. Images festsetzen img2->Height = 600; // Höhe des 1. Images festsetzen img2->Canvas->Rectangle(-10,-10,1200,1200); // Hintergrund auffüllen img1->Picture->LoadFromFile("tempimg.bmp"); // Bild laden // Quell- und Ziel-Rect festlegen und das BMP zentriert zeichnen TRect Source = Rect(0,0,img1->Picture->Width,img1->Picture->Height); TRect Dest = Rect(300 - ( img1->Picture->Width / 2 ),300 - ( img1->Picture->Height / 2 ),300 - ( img1->Picture->Width / 2 )+img1->Picture->Width,300 - ( img1->Picture->Height / 2 )+img1->Picture->Height); img2->Canvas->FillRect(Source); img2->Canvas->CopyRect(Dest, img1->Canvas, Source); img2->Picture->SaveToFile("tempimg.bmp"); // Das Bild als JPEG komprimieren und speichern TJPEGImage *Jpeg = new TJPEGImage; Jpeg->Assign(img2->Picture->Bitmap); Jpeg->CompressionQuality = 80; Jpeg->Compress(); Jpeg->SaveToFile("tempimg.jpg");
-
Hallo
BMPs und auch TImage/TBitmap... haben keine DPI, schließlich gibt es keine physikalischen Grundlagen dafür. DPI-Angaben sind ausschließlich für Ausgaben am Bildschirm und am Drucker sinnvoll.
Du must dich also darum kümmern ein Bitmap der Größe x,y auf eine Fläche der Größe a,b zu skalieren. Und das machst du mit TCanvas::StretchDraw.bis bald
akari
-
Danke für die schnelle Antwort!
Wenn ich mit StretchDraw zeichne, dann ist das Bild ja entweder gestaucht oder zu groß (verpixelt), also so ähnlich wie CopyRect und wird auch so gespeichert. Aber dadurch ändert sich ja nicht die dpi-Anzahl ^^ Oder?
-
Sry 4 dp, also die Breite (600) berechne ich dann mit
600*300/25,4 (inch = 25,4 mm) = 7086,6141732283464566929133858268und die Höhe (600) genau so
600*300/25,4 (inch = 25,4 mm) = 7086,6141732283464566929133858268Doch dann wird das Bild ja auch groß gespeichert hmm

-
Hallo
Dan82 schrieb:
Wenn ich mit StretchDraw zeichne, dann ist das Bild ja entweder gestaucht
Wenn du das Verhältnis von Länge und Breite beibehälst wird nichts gestaucht.
oder zu groß (verpixelt)
Ja was soll denn der Computer deiner Meinung nach machen wenn er ein Bild von der Größe 100x100 auf die Größe von 200x200 bringen soll? Klar füllt er die Lücken nach einem gewissen Muster auf. (mit fällt grad nicht das Fachwort ein).
Das das Bild dann unscharf wird ist klar, diesen Effekt hast du auch in einem Bildbearbeitungsprogramm.Aber dadurch ändert sich ja nicht die dpi-Anzahl ^^ Oder?
Nocheinmal : Bitmaps haben keine DPI, nur Länge und Breite in Pixel. Oder zeig mir mal im Arbeitspeicher die Zoll anhand du Bitmaps messen willst...
bis bald
akari
-
Ok, dann ist es also eigendlich garnicht möglich das Bild über TImage zu bearbeiten ohne einen "DPI-Verlust" zu erleiden? Also bring ja auch nicht das nachträgliche vergrößern was, da das Bild beim Laden ja schon auf 96 DPI gerechnet wird? ^^