Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Jpeg Auflösung ändern (https://www.delphipraxis.net/74586-jpeg-aufloesung-aendern.html)

netscanner 5. Aug 2006 20:25


Jpeg Auflösung ändern
 
Hallo, wie kann ich per Delphi mit ein beliebiges Jpeg Bild öffnen, die Äuflösung ändern und wieder abspeichern.

Öffnen und Abspeichern ist ja kein Problem...aber wie ändere ich beispielsweise die Auflösung von 1024x768 auf 640x480???

DGL-luke 5. Aug 2006 20:56

Re: Jpeg Auflösung ändern
 
zum beispiel per Stretchdraw. Der Filter, der da drni ist, versaut dir das Ergebnis aber. Ich würd zum stretchen Graphics32 benutzen. Der Code wär dann ungefähr so:

Delphi-Quellcode:
procedure Stretch(OldFile: string; ResX,ResY: Integer);
var b: TBitmap32;
begin
  b := TBitmap32.Create;
  with b do
   begin
    LoadFromFile(OldFile); //eventuell brauchst du bereits dafür die unit "jpeg" in den uses
    StretchFilter := sfLanczos;
    Draw(rect(0,0,Width-1,Height-1),b,rect(0,0,ResX-1,ResY-1));
    Width := ResX;
    height := ResY;
    SaveToFile(OldFile); //ich weiss nicht, ob das funktioniert; evtl. musst du es selber noch (z.B. mit jpeg.TJpegImage) in JPEG umwandeln und speichern
   end;
end;

marabu 5. Aug 2006 21:19

Re: Jpeg Auflösung ändern
 
Hallo,

bei ganzzahligen Verhältnissen arbeitet die JPEG-Demo mit der Eigenschaft Scale.

Grüße vom marabu

netscanner 5. Aug 2006 21:44

Re: Jpeg Auflösung ändern
 
wo ist denn die jpeg demo - ich find sie bei mir net :oops:


EDIT: gefunden-.-

netscanner 7. Aug 2006 16:20

Re: Jpeg Auflösung ändern
 
Hallo,
also irgendwie kappiere ich das mit dem Scale nicht....
Könnte mir da jemand mal ein beispiel geben?

Eigentlich sollte das Programm das Bild nicht nur verkleinert darstellen sondern auch von der auflösung her kleiner machen und abspeichern....(das ist das problem)

DGL-luke 7. Aug 2006 17:02

Re: Jpeg Auflösung ändern
 
Alles wesentliche steht doch bei mir drin, oder? :gruebel:

netscanner 7. Aug 2006 21:10

Re: Jpeg Auflösung ändern
 
..schon aber ich kappiert net so wirklich wo man dann die pixel auflösung bestimmen kann :)

DGL-luke 7. Aug 2006 21:18

Re: Jpeg Auflösung ändern
 
hmm...

ein bild hat natürlich eine auflösung. allerdings misst man die in dpi - dots per inch - pixel pro Inch. was du meinst, ist aber eher, das bild zum Beispiel von den Abmaßen 1024x768 auf 800x600 zu skalieren - das sind zwar gebräuchliche Bildschirmauflösungen, sind aber beim Bild eben keine Auflösung. Und die gibst du aber bei ResX und ResY an, ich habs ja nichtmal umbenannt. obwohls eher "DimX" und "DimY" (für Dimensions, Ausmaße) heissen sollte. sonst noch fragen?

netscanner 8. Aug 2006 09:33

Re: Jpeg Auflösung ändern
 
welche Graphic32.dcu soll ich denn einbinden :oops:
Wenn ich die Gr32 einbinde (in uses) erkennt er StretchFilter und Draw nicht...

netscanner 8. Aug 2006 09:52

Re: Jpeg Auflösung ändern
 
so mit dem Draw hab ichs jetzt hinbekommen.
aber der stretch filter wird nicht erkannt......hab gr32 eingebunden (version 1.8.1)

netscanner 8. Aug 2006 10:04

Re: Jpeg Auflösung ändern
 
HIIILFE !!!

Ich habe jetzt eine ältere Graphic32 Version genommmen (1.7).
Jetzt wird der stretchfilter erkannt.

Bei
Delphi-Quellcode:
Draw(rect(0,0,Width-1,Height-1),b,rect(0,0,ResX-1,ResY-1));
sagt mir das scheiß ding aber, dass es keine overload version davon gibt....was ist falsch dran????

DGL-luke 8. Aug 2006 18:31

Re: Jpeg Auflösung ändern
 
overload? wohl eher, es gibt keine überladene ding mit der man bums, naja, du musst du parameter halt noch ein bisschen anpassen, so wie dirs die code completion sagt.

netscanner 8. Aug 2006 20:55

Re: Jpeg Auflösung ändern
 
gut das hab ich auch hinbekommen.
Aber wie mach ich die jpeg umwandlung? Ich bekomms mit Jpeg.Allign(stretch(..)) nicht hin....

netscanner 9. Aug 2006 15:06

Re: Jpeg Auflösung ändern
 
weiß keiner eine lösung???

DGL-luke 9. Aug 2006 15:57

Re: Jpeg Auflösung ändern
 
hmm

eventuell sind die nicht kompatibel, dann musst du das gestretchte bild erst auf die platte speichern und vom jpeg wieder laden lassen

sollte auch gehen, wenn du savetostream machst und den stream von nem tbitmap wieder laden lässt, das sollte du dann aufs jpeg assignen können.

netscanner 9. Aug 2006 16:22

Re: Jpeg Auflösung ändern
 
hat sich erledigt - danke :)

ManuMF 10. Aug 2006 13:40

Re: Jpeg Auflösung ändern
 
Ich habe ein ähnliches Problem mit GR32, siehe hier. Jetzt wollte ich mal diesen Code hier ausprobieren, aber Delphi kennt StretchFilter nicht...
Gibt es eine Möglichkeit, den Code zum Laufen zu bringen? Das mit SetSize (siehe anderes Thema) hat ja nicht funktioniert.

DGL-luke 10. Aug 2006 16:51

Re: Jpeg Auflösung ändern
 
Ich werd mir das gleich ansehen, wenn auf einmal der Stretchfilter nicht mehr da ist, muss das daran liegen, dass irgendwelche sachen in der neuen version geändert wurden. welche version hast du denn? ich werd mir das mal anschauen.

netscanner 10. Aug 2006 18:33

Re: Jpeg Auflösung ändern
 
der stretchfilter geht ab der gr32 1.8 nicht mehr so einzubinden wie früher....
muss irgendwie über application oder so gemacht werden :?

DGL-luke 10. Aug 2006 19:17

Re: Jpeg Auflösung ändern
 
Über Application? *hust*

Vielleicht ist es ja jetzt eine "application wide"-Einstellung, im Gegensatz zu "object wide" wie bisher... ne, auch nicht, habs gerade nachgesehen:

Man muss jetzt TBitmap32.Resampler verwenden:

Delphi-Quellcode:
procedure TCustomResampler.Resample(Dst: TBitmap32; DstRect: TRect; DstClip: TRect; Src: TBitmap32; SrcRect: TRect; CombineOp: TDrawMode; CombineCallBack: TPixelCombineEvent);
Im Image32 Demo müsste das verwendet sein, ich habs mir jetzt nicht selber angesehen.

ManuMF 10. Aug 2006 19:54

Re: Jpeg Auflösung ändern
 
OK, dann werde ich mir mal die Demo anschauen. Ich habe es zwar für das Vorschau-Bild in meinem Prog mit StretchBlt gelöst, aber ich möchte auch ein Bild direkt laden und wieder verkleinert speichern, dafür sollte es dann schon GR32 sein ;-)

ManuMF 12. Aug 2006 20:37

Re: Jpeg Auflösung ändern
 
Fehlanzeige! Ich habe mir die Demo angesehen und das Ganze eingebaut, aber es wirkt sich nur auf die Anzeige aus. :( Ich will aber das Bild tatsächlich verkleinern. Und dass das mit SetSize (hier) nicht funktioniert, wundert mich... :gruebel:
Wie kann ich das machen? Vielleicht mit dem Resampler?

DGL-luke 12. Aug 2006 21:19

Re: Jpeg Auflösung ändern
 
Ja, ich würd schon sagen mit dem Resampler^^

ManuMF 13. Aug 2006 12:14

Re: Jpeg Auflösung ändern
 
OK, jetzt bin ich schon viel weiter...;-)

Wie verwendet man den? In der Demo ist er nicht drin, und die Hilfe kann mir nicht helfen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19: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 by Thomas Breitkreuz