Delphi 将图像从位图转换为RTF后未在ms word中显示(但在写字板中显示)
我正在尝试使用Delphi2007将位图文件转换为rtf 我使用下面的代码进行转换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,
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> }}