반응형
function BitmapToRtf(graph:TBitmap):string;
var
bi, bb, rtf:string;
bis, bbs:cardinal;
achar:ShortString;
HexGraph:string;
I:Integer;
begin
GetDIBSizes(graph.Handle, bis, bbs);
SetLength(bi,bis);
SetLength(bb,bbs);
GetDIB(graph.Handle, graph.Palette, PChar(bi)^, PChar(bb)^);
rtf:='{\rtf1 {\pict\dibitmap ';
SetLength(HexGraph,(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;
HexGraph[I-1]:=achar[1];
HexGraph[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;
HexGraph[I-1]:=achar[1];
HexGraph[I]:=achar[2];
Inc(I,2);
end;
rtf:=rtf + HexGraph + ' }}';
Result:=rtf;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
SS:TStringStream;
begin
SS:=TStringStream.Create(BitmapToRtf(Image1.Picture.Bitmap));
RxRichEdit1.PlainText:=False;
RxRichEdit1.StreamMode:=[smSelection];
RxRichEdit1.Lines.LoadFromStream(SS);
SS.Free;
end;
var
bi, bb, rtf:string;
bis, bbs:cardinal;
achar:ShortString;
HexGraph:string;
I:Integer;
begin
GetDIBSizes(graph.Handle, bis, bbs);
SetLength(bi,bis);
SetLength(bb,bbs);
GetDIB(graph.Handle, graph.Palette, PChar(bi)^, PChar(bb)^);
rtf:='{\rtf1 {\pict\dibitmap ';
SetLength(HexGraph,(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;
HexGraph[I-1]:=achar[1];
HexGraph[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;
HexGraph[I-1]:=achar[1];
HexGraph[I]:=achar[2];
Inc(I,2);
end;
rtf:=rtf + HexGraph + ' }}';
Result:=rtf;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
SS:TStringStream;
begin
SS:=TStringStream.Create(BitmapToRtf(Image1.Picture.Bitmap));
RxRichEdit1.PlainText:=False;
RxRichEdit1.StreamMode:=[smSelection];
RxRichEdit1.Lines.LoadFromStream(SS);
SS.Free;
end;
반응형