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\dibitmap '
;
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
;
procedure
TForm1
.
Button6Click(Sender: TObject);
var
SS: TStringStream;
BMP: TBitmap;
begin
SS := TStringStream
.
Create(BitmapToRTF(BMP));
RichEdit1
.
PlainText :=
False
;
RichEdit1
.
StreamMode := [smSelection];
RichEdit1
.
Lines
.
LoadFromStream(SS);
SS
.
Free;
end
;