Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TImage speichern (https://www.delphipraxis.net/136990-timage-speichern.html)

Berni68 11. Jul 2009 21:38


TImage speichern
 
Hallo zusammen,

ich hab folgendes Problem:

Aus einer Datei zeige ich das Thumbnail in einem TImage an.
Extrahiert und angezeigt wird es wie folgt:
Delphi-Quellcode:
Thumb: TPicture;
SetOlePicture(Thumb, doc.Thumbnail);

Image: TImage;
Image.Picture:= Thumb;
Funktioniert soweit.
Wenn ich jetzt das Bild speichere:
Delphi-Quellcode:
Image.Picture.SaveToFile('C:\xxx.bmp');
kann ich die Datei nicht wieder mit
Delphi-Quellcode:
Image.Picture.LoadFromfile('C:\xxx.bmp');
einlesen. Fehlermeldung: ungültiges Format.

Versuche mit
Delphi-Quellcode:
Image.Picture.Bitmap.SaveToFile('C:\xxx.bmp');
Image.Picture.Graphic.SaveToFile('C:\xxx.bmp');
Image.Picture.Metafile.SaveToFile('C:\xxx.wmf');
gehen auch nicht.
Es kommt zwar immer 'ne Datei raus (Format???), aber wieder einlesen kann man sie nicht.

Kann mir da jemand mal einen Tip geben woran das liegt?

Andreas L. 11. Jul 2009 21:47

Re: TImage speichern
 
Zeig doch mal die SetOlePicture Procedure.

Berni68 11. Jul 2009 21:52

Re: TImage speichern
 
Unit
AxCtrls,

procedure SetOlePicture(Picture: TPicture; OlePicture: IPictureDisp);

Beschreibung
In OLE werden Bilder per Konvention als Automatisierungsobjekte implementiert, in denen die Eigenschaften des Bildes enthalten sind. Diese Prozedur verbindet ein OLE-Bildobjekt (Parameter OlePicture) mit einem nativen VCL-Bild von Delphi (Parameter Picture). Dadurch kann sowohl von OLE- als auch von Delphi-Programmen auf das Bild zugegriffen werden. Das TPicture-Objekt wird mit den Eigenschaften des Parameters OlePicture initialisiert.

Rufen Sie SetOlePicture zur Implementierung einer Automatisierungsmethode auf, die ein OLE-Bild als Parameter übernimmt und dieses Bild als natives TPicture-Objekt weitergeben muß.

Frei aus der Delhi-Hilfe kopiert

jaenicke 11. Jul 2009 21:54

Re: TImage speichern
 
Zitat:

Zitat von Andreas L.
Zeig doch mal die SetOlePicture Procedure.

Wie meinst du das? Die ist bei Delphi dabei. :gruebel: ;-)
(In der Unit AxCtrls)

Zum Thema: Ich schau gleich kurz was da beim Speichern für ein Format rauskommt. Was ist denn doc.Thumbnail?

Berni68 11. Jul 2009 21:59

Re: TImage speichern
 
doc.Thumbnail ist vom Typ:

property Thumbnail: IPictureDisp

Ist eine DateiVorschau von Autodesk Inventor.

Ich dachte es ist .bmp oder .wmf scheint es aber doch nicht zu sein.

Andreas L. 11. Jul 2009 22:02

Re: TImage speichern
 
Zitat:

Zitat von jaenicke
Zitat:

Zitat von Andreas L.
Zeig doch mal die SetOlePicture Procedure.

Wie meinst du das? Die ist bei Delphi dabei. :gruebel: ;-)
(In der Unit AxCtrls)

Wusste ich nicht, dachte das wäre eine Eigenkreation... :oops:

EDIT: Müsste doch aber gehen das Canvas des Images in ein neues TBitmap zu kopieren und dieses dann zu speichern?

Berni68 11. Jul 2009 22:20

Re: TImage speichern
 
wenn ich ein weitere TImage (Image1) plaziere, kann ich mit

Image1.Picture.Graphic:= Image.Picture.Graphic;
Image1.Picture.Graphic.SaveToFile('c:\test.jpg'); (so auch in der Delphi -Hilfe drein)

das Bild kopieren. Es wird am Bildschirm korrekt angezeigt

test.jpg wird auch erzeugt, ist auch 96 kB groß kann aber mit keinem Bildbetrachter angeschaut werden -> ungültiges Format

Andreas L. 12. Jul 2009 09:41

Re: TImage speichern
 
Gehts denn so:

Delphi-Quellcode:
var
  bmp: Tbitmap;
begin
  bmp := TBitmap.Create;
  try
    bmp.Width := Image1.Width;
    bmp.Height := Image1.Height;
    bmp.Canvas.Draw(0, 0, Image1.Picture.Graphic);
    bmp.SaveToFile('D:\test.bmp');
  finally
    bmp.Free;
  end;

Berni68 12. Jul 2009 10:08

Re: TImage speichern
 
Ja, so geht es.
Vielen Dank.


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