AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi JPEG/GIF vergrößern oder verkleinern
Thema durchsuchen
Ansicht
Themen-Optionen

JPEG/GIF vergrößern oder verkleinern

Ein Thema von CalganX · begonnen am 26. Mai 2006 · letzter Beitrag vom 29. Mai 2006
Antwort Antwort
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

JPEG/GIF vergrößern oder verkleinern

  Alt 26. Mai 2006, 12:05
Hi,
ich habe mir diesen Code aus der Code-Library genommen und versucht bei mir in ein Programm einzubauen. Hab es nur ein wenig verändert, so dass es jetzt so aussieht:
Delphi-Quellcode:
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;
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:
Code:
---------------------------
BitmapTester
---------------------------
Bild kann nur geändert werden, wenn es ein Bitmap enthält.
---------------------------
OK  
---------------------------
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?

Hat das jemand schon probiert oder auch so spontan einen Vorschlag?

Chris
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: JPEG/GIF vergrößern oder verkleinern

  Alt 27. Mai 2006, 12:17
Zitat von Chakotay1308:
Hat das jemand schon probiert oder auch so spontan einen Vorschlag?
Ja.





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:
// The Test Sample
procedure TForm1.Button1Click(Sender: TObject);
begin
  ResizeImage(image1.picture.Width div 2 , image1.picture.Height div 2, image1);
end;
Halt! Stopp, das geht so nicht. (nur mit Bitmaps zum verkleinern)
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: JPEG/GIF vergrößern oder verkleinern

  Alt 27. Mai 2006, 12:27
Zitat von turboPASCAL:
Ja.

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;
nein, denn das stimmt nur für's Verkleinern

Das wäre dann nur für's Vergrößern:
Delphi-Quellcode:
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;
Es muß im Bild halt immer das größte Maß eingestllt werden:
Delphi-Quellcode:
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;
Das geht och, da .Width/.Height intern och nochma abfragen (sollten) ob wirklich geändert wird:
Delphi-Quellcode:
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;
Oder halt so:
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;
$2B or not $2B
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: JPEG/GIF vergrößern oder verkleinern

  Alt 27. Mai 2006, 12:37
Hi,
danke euch beiden. Ich probiere das mal aus.
@himitsu: Allerdings frage ich mich jetzt, ob ich überhaupt nocht vergrößeren kann...

Chris
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: JPEG/GIF vergrößern oder verkleinern

  Alt 27. Mai 2006, 13:01
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
$2B or not $2B
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: JPEG/GIF vergrößern oder verkleinern

  Alt 27. Mai 2006, 14:13
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: JPEG/GIF vergrößern oder verkleinern

  Alt 29. Mai 2006, 12:50
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

Ansonsten mal im Forum suchen, ich glaub hier wurd bestimmt schon ein-/zweimal danach gefragt.
$2B or not $2B
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: JPEG/GIF vergrößern oder verkleinern

  Alt 29. Mai 2006, 15:29
Hi,
ich habe das Ganze jetzt anders gemacht. turboPASCAL hat mich auf diesen Source aufmerksam gemacht. Der ist schön und taugt was (scheinbar).

Trotzdem danke für deine Hilfe.
Chris
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#9

Re: JPEG/GIF vergrößern oder verkleinern

  Alt 29. Mai 2006, 15:56
Standardantwort: GR32

Die Stretchfilter sind edelst, sag ich bloß.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz