AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi JPEG resizen und nur Probleme
Thema durchsuchen
Ansicht
Themen-Optionen

JPEG resizen und nur Probleme

Ein Thema von alcaeus · begonnen am 15. Jul 2005 · letzter Beitrag vom 15. Jul 2005
 
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

JPEG resizen und nur Probleme

  Alt 15. Jul 2005, 10:58
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:
if ExtractFileExt(Self.FileList[NewImage]) = '.jpgthen
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]) = '.bmpthen
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]));
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

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 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