![]() |
JPEG/GIF vergrößern oder verkleinern
Hi,
ich habe mir ![]()
Delphi-Quellcode:
Wenn ich Bitmaps in meinem TImage habe, ist das auch kein Problem und es funktioniert alles tadellos. Wenn ich aber nun JPEGs oder GIFs (entsprechende Units sind überall entsprechend eingebunden), bekomme ich folgende Fehlermeldung:
procedure ResizeImage(newWidth, newHeight: integer; Image: TImage; var DestBitmap: TBitmap);
begin SetStretchBltMode(DestBitmap.Canvas.Handle, Halftone); StretchBlt(DestBitmap.Canvas.Handle, 0, 0, newWidth, newHeight, Image.Canvas.Handle, 0, 0, Image.Width, Image.Height, SRCCOPY); DestBitmap.Width := newWidth; DestBitmap.Height := newHeight; end;
Code:
In einem anderen Thread habe ich schon gelesen, dass es daran liegt, dass das Image keine Canvas-Zeichenfläche mehr hat, wenn ich keine Bitmaps geladen habe. Aber wie kann ich dann ein korrektes HDC an die StretchBlt-Methode weitergeben?
---------------------------
BitmapTester --------------------------- Bild kann nur geändert werden, wenn es ein Bitmap enthält. --------------------------- OK --------------------------- Hat das jemand schon probiert oder auch so spontan einen Vorschlag? Chris |
Re: JPEG/GIF vergrößern oder verkleinern
Zitat:
:mrgreen:
Delphi-Quellcode:
procedure ResizeImage(newWidth, newHeight: integer; Image: TImage);
begin Image.Canvas.StretchDraw(Rect(0,0,newWidth,newHeight), Image.Picture.Graphic); Image.Picture.Graphic.Width := newWidth; Image.Picture.Graphic.Height := newHeight; end;
Delphi-Quellcode:
Halt! Stopp, das geht so nicht. (nur mit Bitmaps zum verkleinern)
// The Test Sample
procedure TForm1.Button1Click(Sender: TObject); begin ResizeImage(image1.picture.Width div 2 , image1.picture.Height div 2, image1); end; |
Re: JPEG/GIF vergrößern oder verkleinern
Zitat:
Das wäre dann nur für's Vergrößern:
Delphi-Quellcode:
Es muß im Bild halt immer das größte Maß eingestllt werden:
procedure ResizeImage(newWidth, newHeight: integer; Image: TImage);
begin Image.Picture.Graphic.Width := newWidth; Image.Picture.Graphic.Height := newHeight; Image.Canvas.StretchDraw(Rect(0,0,newWidth,newHeight), Image.Picture.Graphic); end;
Delphi-Quellcode:
Das geht och, da .Width/.Height intern och nochma abfragen (sollten) ob wirklich geändert wird:
procedure ResizeImage(newWidth, newHeight: integer; Image: TImage);
begin If Image.Picture.Graphic.Width < newWidth Then Image.Picture.Graphic.Width := newWidth; If Image.Picture.Graphic.Height < newHeight Then Image.Picture.Graphic.Height := newHeight; Image.Canvas.StretchDraw(Rect(0,0,newWidth,newHeight), Image.Picture.Graphic); If Image.Picture.Graphic.Width > newWidth Then Image.Picture.Graphic.Width := newWidth; If Image.Picture.Graphic.Height > newHeight Then Image.Picture.Graphic.Height := newHeight; end;
Delphi-Quellcode:
Oder halt so:
procedure ResizeImage(newWidth, newHeight: integer; Image: TImage);
begin If Image.Picture.Graphic.Width < newWidth Then Image.Picture.Graphic.Width := newWidth; If Image.Picture.Graphic.Height < newHeight Then Image.Picture.Graphic.Height := newHeight; Image.Canvas.StretchDraw(Rect(0,0,newWidth,newHeight), Image.Picture.Graphic); Image.Picture.Graphic.Width := newWidth; Image.Picture.Graphic.Height := newHeight; end;
Delphi-Quellcode:
procedure ResizeImage(newWidth, newHeight: integer; Image: TImage);
begin Image.Picture.Graphic.Width := Max(Image.Picture.Graphic.Width, newWidth); Image.Picture.Graphic.Height := Max(Image.Picture.Graphic.Height, newHeight); Image.Canvas.StretchDraw(Rect(0,0,newWidth,newHeight), Image.Picture.Graphic); Image.Picture.Graphic.Width := newWidth; Image.Picture.Graphic.Height := newHeight; end; |
Re: JPEG/GIF vergrößern oder verkleinern
Hi,
danke euch beiden. Ich probiere das mal aus. @himitsu: Allerdings frage ich mich jetzt, ob ich überhaupt nocht vergrößeren kann... :gruebel: Chris |
Re: JPEG/GIF vergrößern oder verkleinern
Ja, kannst du ... beim Vergößern muß halt nur vorher das Bild größer gemacht werden, denn irgendwo muß es ja hingemalt werden ... die letzten Beispiele stimmen schon in beiden Richtungen :zwinker:
|
Re: JPEG/GIF vergrößern oder verkleinern
Hi,
stimmt. Funktioniert auch soweit. Danke. :) Kann man irgendwas an der Qualität machen? Die ist nämlich ein wenig grausam... also zumindest was die Kantenglättung angeht. :? Chris |
Re: JPEG/GIF vergrößern oder verkleinern
Irgendwie ist das möglich (hab mir nur nicht gemerkt wir ._.) ... versuchmal bei SetStretchBltMode etwas zu machen, eventuell gibt's ja 'nen anderen(besseren) Mode :gruebel:
Ansonsten mal im Forum suchen, ich glaub hier wurd bestimmt schon ein-/zweimal danach gefragt. :stupid: |
Re: JPEG/GIF vergrößern oder verkleinern
Hi,
ich habe das Ganze jetzt anders gemacht. turboPASCAL hat mich auf ![]() Trotzdem danke für deine Hilfe. ;) Chris |
Re: JPEG/GIF vergrößern oder verkleinern
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 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