Entwickler-Ecke
Multimedia / Grafik - Grösse eines Bildes verändern
Bayo - Fr 28.06.02 13:00
Titel: Grösse eines Bildes verändern
Hi zusammen....
Ich möchte gerne entweder mit einem TBitmap oder einem TJPEGImage ein Bild laden, die Grösse des Bildes verändern und es wieder als JPG bzw. BMP speichern. Hat evtl. schon mal jemand von euch etwas in der Art gemacht?? Bin dankbar für jede Anregung!!
Grüsse Dominic
DeCodeGuru - Fr 28.06.02 13:05
Also, ich habe das mal so gelöst:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.ResizeImage(newWidth,newHeight: Integer); begin SetStretchBltMode(Image2.Canvas.Handle, Halftone); StretchBlt(Image2.Canvas.Handle, 0,0,newwidth,newheight,Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,SRCCOPY); end;
procedure TForm1.Button1Click(Sender: TObject); begin ResizeImage(100,50); end; |
In Image1 wird das Bild geladen und in Image2 wird es vergrößert oder verkleinert dargestellt.
Bayo - Fr 28.06.02 13:39
Hi...
Erstamls bedanke ich mich für deine Antwort!!
Ich habe das mal probiert, leider erstellt er bei mir immer nur ein 0kb grosses Bild, auf dem nichts zu sehen ist :-(
Mein Code sieht folgendermassen aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button1Click(Sender: TObject); var bmp1, bmp2: TBitmap;
begin bmp1 := TBitmap.Create; bmp2 := TBitmap.Create; try if OpenDialog1.Execute then begin bmp1.LoadFromFile(OpenDialog1.FileName); SetStretchBltMode(bmp2.Canvas.Handle, Halftone); StretchBlt(bmp2.Canvas.Handle, 0, 0, 50, 50, bmp1.Canvas.Handle, 0, 0, bmp1.Width, bmp1.Height, SRCCOPY); bmp2.SaveToFile('Dominic.bmp'); end; finally FreeAndNil(bmp1); FreeAndNil(bmp2); end; end; |
Ich habe in diesem Beispiel ein TBitmap genommen, könnte das evtl. der Fehler sein, muss ich evtl. eine andere Klasse nehmen??
Grüsse dominic
OregonGhost - Fr 28.06.02 18:58
Der Fehler liegt vielleicht hier:
Quelltext
1:
| SetStretchBltMode(bmp2.Canvas.Handle, Halftone); |
Zitat: |
HALFTONE:
Maps pixels from the source rectangle into blocks of pixels in the destination rectangle. The average color over the destination block of pixels approximates the color of the source pixels.
After setting the HALFTONE stretching mode, an application must call the SetBrushOrgEx function to set the brush origin. If it fails to do so, brush misalignment occurs.
This option is not supported on Windows 95/98/Me.
|
Mit anderen Worten: HALFTONE produziert zwar die besten Ergebnisse, aber wird nur unter Windows NT unterstützt. Also hast du wahrscheinlich ein Windows 9x. Oder es liegt am fehlenden Aufruf von SetBrushOrgEx().
Also: Wenn du 9x hast, verwende statt HALFTONE einfach BLACKONWHITE oder COLORONCOLOR, wenn du NT hast, füge einen Aufruf von SetBrushOrgEx() ein.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!