Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   WICImage (https://www.delphipraxis.net/205603-wicimage.html)

Willie1 27. Sep 2020 18:28

WICImage
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, ich bin immer noch an meinem Programm am Basteln. Ich will auch Heif-Bilder anzeigen können.
Im Testprogramm klappt das aber nicht in der Ausführung im größeren Projekt.
Für Heif benutze ich:
Delphi-Quellcode:
  if IsHeif(fn) then begin
    WICImg:=TWICImage.Create;
    WICImg.LoadFromFile(fn);
    Img.Center:=true; Img.Proportional:=true;
    Img.Picture.Graphic:=WICImg;
    WICImg.Free;
  end;
Für alle anderen Formate:
Delphi-Quellcode:
    GPImage := TGPImage.Create(fn);  
    GPGraphics:=TGPGraphics.Create(img.Canvas.Handle);    
    GPGraphics.DrawImage(GPImage, (img.Width - W) shr 1, (img.Height - H) shr 1, W, H);
Das läuft für beide Konstrukte. Aber wenn ich Methode für Heic durchlaufen habe und dann wieder ein Jpeg-Bild anzeigen will, crasht es in der Zeile GPDrawImage... . Siehe Screenshot! Es handelt sich um das gleiche TImage.
Was ist da los. Willie.

TiGü 28. Sep 2020 07:55

AW: WICImage
 
Bitte minimales Beispiel-Projekt mit Beispiel-Bild erzeugen, zippen und anhängen.

Delphi.Narium 28. Sep 2020 12:50

AW: WICImage
 
Guck mal bitte hier: https://www.delphipraxis.net/1365110-post6.html

Hilft das bei Dir analog in etwa der Form:
Delphi-Quellcode:
  if IsHeif(fn) then begin
    WICImg := TWICImage.Create;
    WICImg.LoadFromFile(fn);
    Img.Center:=true; Img.Proportional:=true;
    Img.Picture.Graphic.Assign(Nil);
    Img.Picture.Graphic.Assign(WICImg);
    WICImg.Free;
  end;
Wobei: Was ich jetzt nicht so genau weiß:

Delphi-Quellcode:
 Img.Picture.Graphic := WICImg;


Jetzt zeigt doch Img.Picture.Graphic auf WICImg.
Und wohin zeigt es nach dem
Delphi-Quellcode:
 WICImg.Free;
?

Oder wird bei der Zuweisung mit := eine Kopie von WICImg erstellt? Wohl eher nicht.

Willie1 28. Sep 2020 17:31

AW: WICImage
 
Hallo,
ich schicke euch mein Testprogramm, das Bilder in einem TImage öffnet. Das funktioniert bei Jpeg, Tif, Bmp und Heif.
In meinem großen Projekt benutze ich bei Jpeg's GDI+, um das Bild mit RotateFlip drehen zu können. Das geht auch aber wenn ich ein Heif-Bild wie oben geöffnet habe, crasht es anschließend. Dabei wird das gleiche Image benutzt.
Delphi-Quellcode:
procedure ShowHeif(Img: TImage; const fn: TFilename);
var
  WICImg: TWICImage;
begin
  WICImg:=TWICImage.Create;
  WICImg.LoadFromFile(fn);
  Img.Center:=true;
  Img.Proportional:=true;
  Img.Picture.Graphic:=WICImg;
  WICImg.Free;
end;
Der Rest ist einfach. Button, OpenPictureDialog und Image, das ist es!
Willie.

Nachtrag: es sieht so aus, als wenn durch WICImage an TImage etwas verändert wird, so dass danach die Anzeige über GDI+ nicht mehr funktioniert.

TiGü 29. Sep 2020 08:40

AW: WICImage
 
Zitat:

Zitat von Willie1 (Beitrag 1474465)
]Der Rest ist einfach. Button, OpenPictureDialog und Image, das ist es!

Das sind fünf Minuten, die von meiner Zeit/die der anderen drauf gehen.
Fertiges Beispielprojekt mit den Bildern dazu, zippen und hochladen.
Sonst keine Hilfe.

Warum? Wieso? Weshalb?
https://stackoverflow.com/help/minim...ucible-example
http://sscce.org/

Willie1 29. Sep 2020 17:50

AW: WICImage
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
siehe Anhang!
Willie.

Willie1 29. Sep 2020 18:38

AW: WICImage
 
Ich wollte noch eine von Ballast befreite Datei hochladen, geht aber nicht! Obwohl sie innerhalb der Grenze 5 MB liegt. W.

mmw 29. Sep 2020 20:16

AW: WICImage
 
hallo,
bei mir funktioniert es so

Delphi-Quellcode:
procedure ClearImage(im: TImage);

var
  Rec: TRect;
begin
    im.Picture:=nil;// <-----

    Im.Canvas.Brush.Color:=clBtnFace;
    Rec:=Rect(0, 0, Im.Width, Im.Height);
    Im.Canvas.FillRect(Rec);
end;
Delphi-Quellcode:
   try
       GPGraphics:=TGPGraphics.Create(img.Canvas.Handle);
       GPGraphics.DrawImage(GPImage, (img.Width - W) shr 1, (img.Height - H) shr 1, W, H)
vielleicht lieber so

Delphi-Quellcode:
GPGraphics:=TGPGraphics.Create(img.Canvas.Handle);

try
GPGraphics.DrawImage(GPImage, (img.Width - W) shr 1, (img.Height - H) shr 1, W, H)

Gruß

TiGü 30. Sep 2020 13:43

AW: WICImage
 
So umsetzen wie mmw schrieb, dann geht das.

himitsu 30. Sep 2020 16:52

AW: WICImage
 
Zitat:

Zitat von mmw (Beitrag 1474544)
vielleicht lieber so

siehe https://www.delphipraxis.net/154794-...en-nutzen.html
bzw. https://www.delphipraxis.net/205627-...stoeren-2.html

Zitat:

Zitat von mmw (Beitrag 1474544)
Delphi-Quellcode:
im.Picture:=nil;// <-----

Das ganze Picture löschen, anstatt nur die Graphic? (wüsste garnicht dass das geht)

aber
Delphi-Quellcode:
im.Picture.Graphic := nil;

Willie1 30. Sep 2020 17:45

AW: WICImage
 
Ja, Danke Freunde, das klappt im Testprogramm. Ich muss es noch auf das Projekt umsetzen.
Willie.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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