![]() |
JPEG resizen und nur Probleme
Hallo ihr,
ich arbeite zur Zeit an einer Slideshow fuer Bilder, und muss dabei ein Paar Bilder resizen. Zuerst habe ich mit StretchBlt gearbeitet, allerdings zeigt dies beim Resizen von JPEGs gewaltige Probleme. Mit TCanvas.StretchDraw funktioniert es hingegen einwandfrei. Doch das naechste Problem kommt: Das Programm ladet fuer jeden Monitor ein Bild in den Speicher, und zeichnet es dann auf die Paintbox fuer den jeweiligen Bildschirm. Mit StretchBlt ist dies wiederum kein Problem, mit StretchDraw ist auf beiden Bildschirmen das gleiche zu sehn. Hier mal ein bisschen Code:
Delphi-Quellcode:
Zur Erklaerung: NewImage ist der Index zum Dateinamen, iIndex ist der Index des Monitors auf dem grad gezeichnet wird. Die Ausgabe ist fuer jeden Monitor richtig, wenn ich nun aber StretchDraw anstatt StretchBlt verwende, so sehe ich auf beiden Monitoren das gleiche Bild, allerdings den Index und Pfad zum richtigen Bild. Weiss jemand, wie ich StretchBlt dazu bringen kann, richtig zu arbeiten, bzw. kann mir jemand sagen, wie ich StretchDraw dazu bringe, das Bild das grad in TempBMP liegt zu verwenden, und nicht sonstwas? Ich kann den Fehler beim besten Willen nicht erkennen :?
if ExtractFileExt(Self.FileList[NewImage]) = '.jpg' then
begin Loaded := True; TempJPG.LoadFromFile(Self.FileList[NewImage]); TempBMP.Assign(TempJPG); end //if ExtractFileExt(Self.FileList[NewImage]) = '.jpg' then else if ExtractFileExt(Self.FileList[NewImage]) = '.bmp' then begin Loaded := True; TempBMP.LoadFromFile(Self.FileList[NewImage]); end; //else if ExtractFileExt(Self.FileList[NewImage]) = '.bmp' then PaintBoxList[1][iIndex].Tag := NewImage; OldWidth := TempBMP.Width; OldHeight := TempBMP.Height; ScaleFactor := PaintBoxList[0][iIndex].Width / OldWidth; if OldHeight * ScaleFactor > PaintBoxList[0][iIndex].Height then begin ScaleFactor := PaintBoxList[0][iIndex].Height / OldHeight; end; //if OldHeight * ScaleFactor > PaintBoxList[0][i].Height then //Prevent pictures from being "blown up" if ScaleFactor > 1 then ScaleFactor := 1; NewWidth := Round(ScaleFactor * OldWidth); NewHeight := Round(ScaleFactor * OldHeight); PicLeft := (PaintBoxList[0][iIndex].Width - NewWidth) div 2; PicTop := (PaintBoxList[0][iIndex].Height - NewHeight) div 2; //Image is now loaded, let's stretchdraw it onto the paintbox PaintBoxList[1][iIndex].Canvas.Brush.Color := clBlack; PaintBoxList[1][iIndex].Canvas.FillRect(PaintBoxList[1][iIndex].ClientRect); //PaintBoxList[1][iIndex].Canvas.StretchDraw(Rect(PicLeft, PicTop, PicLeft+NewWidth, PicTop+NewHeight), TempBMP); StretchBlt(PaintBoxList[1][iIndex].Canvas.Handle, PicLeft, PicTop, NewWidth, NewHeight, TempBMP.Canvas.Handle, 0, 0, OldWidth, OldHeight, SRCCOPY); PaintBoxList[1][iIndex].Canvas.Font.Color := clRed; PaintBoxList[1][iIndex].Canvas.Font.Name := 'Tahoma'; PaintBoxList[1][iIndex].Canvas.Font.Size := 24; PaintBoxList[1][iIndex].Canvas.TextOut(10, 10, IntToStr(PaintBoxList[1][iIndex].Tag)+'; '+ExtractFileName(Self.FileList[NewImage])); Greetz alcaeus |
Re: JPEG resizen und nur Probleme
Ist es Absicht, dass du mal PaintBoxList[0][iIndex] und mal PaintBoxList[1][iIndex] benutzt, oder sind die immer gleich groß?
Wie klappt das StretchBlt bei Jpegs denn nicht? Ansonsten, wenn TmpJPG und TmpBMP globale Variablen sind, vielleicht mal als lokale ausprobieren. Sonst seh' ich in den Zeilen nichts auffälliges... |
Re: JPEG resizen und nur Probleme
Zitat:
Zitat:
Zitat:
Schonmal vielen Dank fuer die Hilfe. Greetz alcaeus |
Re: JPEG resizen und nur Probleme
Zitat:
Delphi-Quellcode:
with PaintBoxList[1][iIndex].Canvas do
begin GetBrushOrgEx(Handle, pt); SetStretchBltMode(Handle, HALFTONE); SetBrushOrgEx(Handle, pt.x, pt.y, @pt); StretchBlt(Handle, PicLeft, PicTop, NewWidth, NewHeight, TempBMP.Canvas.Handle, 0, 0, OldWidth, OldHeight, SRCCOPY); end; |
Re: JPEG resizen und nur Probleme
:firejump: Das funktioniert perfekt, danke :)
Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz