Einzelnen Beitrag anzeigen

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, 19: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