Delphi 将图像从位图转换为RTF后未在ms word中显示(但在写字板中显示)

Delphi 将图像从位图转换为RTF后未在ms word中显示(但在写字板中显示),delphi,ms-word,bitmap,rtf,delphi-2007,Delphi,Ms Word,Bitmap,Rtf,Delphi 2007,我正在尝试使用Delphi2007将位图文件转换为rtf 我使用下面的代码进行转换 function BitmapToRTF(pict: TBitmap): string; var bi, bb, rtf: string; bis, bbs: Cardinal; achar: ShortString; hexpict: string; I: Integer; begin GetDIBSizes(pict.Handle, bis, bbs); SetLength(bi,

我正在尝试使用Delphi2007将位图文件转换为rtf

我使用下面的代码进行转换

function BitmapToRTF(pict: TBitmap): string;
var
  bi, bb, rtf: string;
  bis, bbs: Cardinal;
  achar: ShortString;
  hexpict: string;
  I: Integer;
begin
  GetDIBSizes(pict.Handle, bis, bbs);
  SetLength(bi, bis);
  SetLength(bb, bbs);
  GetDIB(pict.Handle, pict.Palette, PChar(bi)^, PChar(bb)^);
  rtf := '{\rtf1 {\pict\dibitmap0 ';
  SetLength(hexpict, (Length(bb) + Length(bi)) * 2);
  I := 2;
  for bis := 1 to Length(bi) do
  begin
    achar := Format('%x', [Integer(bi[bis])]);
    if Length(achar) = 1 then
      achar := '0' + achar;
    hexpict[I - 1] := achar[1];
    hexpict[I] := achar[2];
    Inc(I, 2);
  end;
  for bbs := 1 to Length(bb) do
  begin
    achar := Format('%x', [Integer(bb[bbs])]);
    if Length(achar) = 1 then
      achar := '0' + achar;
    hexpict[I - 1] := achar[1];
    hexpict[I] := achar[2];
    Inc(I, 2);
  end;
  rtf := rtf + hexpict + ' }}';
  Result := rtf;
end;
现在我的问题是我无法在MS Word或查看器中查看图像。

但是我可以在word pad中查看图像。


请建议我解决这个问题。

如何将图像转换为文本文件? RTF是RichtTextFormat吗

我会把bmp和MicrosoftWordAPI放在一个文档中,然后将文档保存为rtf


Tobi

我认为问题在于RTF呈现的Word实现比写字板需要更多的信息(我认为出于安全原因-避免溢出攻击-),但我必须承认这纯粹是猜测

在描述位图信息时尽量准确:例如,如果位图是32位的,请使用\wbmbitspixel32,在rtf编码中使用\picw和\pich等输入宽度和高度。这样做可能会带来好运

以下是一个例子:


如果要在MS Word或Word Viewer中查看图像,请将图像转换为EMF文件并将其嵌入RTF标记中。(注意:此处您无法在写字板中查看图像)

{\rtf1{\pict\emfblif}

如果要在写字板中查看图像,请将图像转换为位图并将其嵌入RTF标记中

{\rtf1 {\pict\dibitmap0 <bitmap source> }}
{\rtf1{\pict\dibitmap0}

我不知道为什么会发生这种情况。

您的意思是将BMP文件转换为带有嵌入BMP文件的RTF文件?是的,我的意思是,将BMP嵌入RTF文档获取BMP文件,手动将其包含在Word中,以RTF格式保存文档。查看保存的文件与您的文件之间的差异。尝试通过删除看似多余的命令来剥离rtf文件,以找出Word所需的命令。但这很麻烦,因为不同的Word版本支持不同的rtf版本。
{\rtf1 {\pict\dibitmap0 <bitmap source> }}