AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Grafiken in Binär-oder Hexadezimalcode umwandeln
Thema durchsuchen
Ansicht
Themen-Optionen

Grafiken in Binär-oder Hexadezimalcode umwandeln

Ein Thema von Pascal · begonnen am 20. Okt 2005 · letzter Beitrag vom 20. Okt 2005
Antwort Antwort
Pascal

Registriert seit: 10. Aug 2003
22 Beiträge
 
Delphi 7 Enterprise
 
#1

Grafiken in Binär-oder Hexadezimalcode umwandeln

  Alt 20. Okt 2005, 16:18
Hallo,

ich habe folgendes Problem:
Ich möchte eine rtf-Datei schreiben, um diese später von Word anzeigen zu lassen.
Ich öffne die rtf-Datei als normale Datei und lese sie in einen Buffer ein. Diesen erweitere ich dann mit rtf-Tags und schreibe den Buffer wieder zurück.
Nun muss ich auch Bilder einfügen können. Bilder werden im rtf-Format im Binär-oder Hexadezimalcode gelesen.
Gibt es eine Möglichkeit, beliebige Grafiken zu laden, in Binärcode umzuwandeln und diesen dann in eine Datei zu schreiben?
Oder hat sonst jemand eine Idee?

Grüße Pascal
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Grafiken in Binär-oder Hexadezimalcode umwandeln

  Alt 20. Okt 2005, 16:44
Hi,

deine Grafik liegt ja als Binärdatei vor. Somit sollte es reichen, die Grafikdatei als Stream zu öffnen und in deine rtf-Datei zu kopieren. Falls du die Grafik in deinem Programm brauchst, müsste sich auch die Methode SaveToStream von TGraphic verwenden lassen.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Grafiken in Binär-oder Hexadezimalcode umwandeln

  Alt 20. Okt 2005, 18:07
Wenn du es probierst: bedenke, dass in RTF-Dateien alle Grafiken als Metafiles abgespeichert werden (WMF ohne Header).

Ich poste mal etwas Beispielcode (ungetestet):

Delphi-Quellcode:
function MetafileToRtf(Metafile: TMetafile: OutputStream: TStream);
type
  TMetafileHeader = packed record
    Key: Cardinal;
    Handle: SmallInt;
    Box: TSmallRect;
    Inch: Word;
    Reserved: Cardinal;
    CheckSum: Word;
  end;
var
  MemoryStream: TMemoryStream;
  DataSize: int64;
  Pre, Suf: string;
begin
  MemoryStream := TMemoryStream.Create;
  try
    Metafile.Enhanced := false;
    Metafile.SaveToStream(MemoryStream);
    MemoryStream.Position := SizeOf(TMetafileHeader);
    DataSize := MemoryStream.Size - MemoryStream.Position;

    { \picw und \pich - Darstellungsgröße in 1/100 mm
      \picwgoal und \pichgoal - Originalgröße in Twips
      \picscalex und picscaley - Verhältnis Darstellungsgröße:Originalgröße in Prozent
    }

    Pre := Format('{\pict\wmetafile8\picw%d\pich%d' +
      '\picscalex%d\picscaley%d\picwgoal%d\pichgoal%d\bin%d'#13#10,
      [MulDiv(Metafile.Width, 2560, Metafile.Inch),
       MulDiv(Metafile.Height, 2560, Metafile.Inch),
       100, 100,
       MulDiv(Metafile.Width, 1440, Metafile.Inch),
       MulDiv(Metafile.Height, 1440, Metafile.Inch),
       DataSize]);
    Suf := '}';

    OutputStream.WriteBuffer(Pre[1], Length(Pre));
    OutputStream.CopyFrom(MemoryStream, DataSize);
    OutputStream.WriteBuffer(Suf[1], Length(Suf));
  finally
    MemoryStream.Free;
  end;
end;
Danach noch ein "OutputStream.Position := 0" und du kannst die Daten aus dem Stream benutzen.

Achso: Wenn deine Grafik nicht als Metafile vorliegt, dann kannst du sie ja einfach erst als Bitmap laden und dann in den Canvas eines Metafiles malen.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Grafiken in Binär-oder Hexadezimalcode umwandeln

  Alt 20. Okt 2005, 19:05
Hi Flocke,

die RTF Spezifikation vom April 2004 nennt 10 mögliche Bildformate, darunter JPEG, PNG, BMP und auch WMF. Da RTF den Anspruch der Plattformunabhängigkeit erhebt, wäre WMF alleine auch etwas zu wenig.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Grafiken in Binär-oder Hexadezimalcode umwandeln

  Alt 20. Okt 2005, 19:26
Ist schon richtig (man kann im Grunde über OLE eh alles reinpacken) - aber welche Programme können diese Grafiken denn dann darstellen?

[Nachtrag] OK - hab's gerade nachgelesen - steht in der RTF Spezi 2002 Final auch schon drin. Hab's allerdings in wirklichem RTF noch nie gesehen

[Noch'n Nachtrag] Der obige Code würde aber auch mit den anderen \picttype funktionieren - man muss dann nur den Binärstream ersetzen.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  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 12:54 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