怎么将 RTF 文件 转化成 BMP 文件(大小固定)! 在线等高手回答!

jianjian007 2008-06-18 04:37:00
现在有一个RTF 文件.
里面有一些内容. 版式已经排好.字体..字体形色也都设置好了.
现在我想转化成若干张bmp图片(256*64大小的)
图片底色为黑色.内容为RTF文件里面的内容(版式.字体.字体颜色.字体大小都要一致). 当一张图片显示不了.在生成另外的图片.
现在我的大致思路是先在内存中建个TBitmap.在从RTF文件中读出内容.把canvas设好.在画出来.!但读出一行内容后不知道分析他的字体.颜色.大小等等.
...全文
194 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianjian007 2008-07-08
  • 打赏
  • 举报
回复

地址在哪里? 下来去看看!
jianjian007 2008-07-07
  • 打赏
  • 举报
回复

还是没人啊?
csdn的高手快出现啊!
zoologist 2008-07-07
  • 打赏
  • 举报
回复
有一种取打印御览的方法, delphi盒子上面有
jacknes009 2008-07-04
  • 打赏
  • 举报
回复
关注着方法。。。。
jianjian007 2008-07-04
  • 打赏
  • 举报
回复

怎么没有人啊?
jianjian007 2008-07-03
  • 打赏
  • 举报
回复
高手啊.高手..在哪里啊.在哪里
小笨象 2008-06-25
  • 打赏
  • 举报
回复
顶一下。
为何要很多很多个字才能回复。
dunzimu 2008-06-24
  • 打赏
  • 举报
回复
帮你顶,应该有高手知道怎样解决的。
jianjian007 2008-06-24
  • 打赏
  • 举报
回复
高手啊高手.
赐予我方法吧.!
jianjian007 2008-06-23
  • 打赏
  • 举报
回复

谢谢楼上的兄弟.
不过我们也是存在你这问题!
当内容很多时.我们分屏的时候出现行重复.!
代码如下.你帮我看看!


var bmp:Tbitmap;
IM,i:Integer;
begin
bmp:=tbitmap.Create;
bmp.Height :=RichEdit1.Height;
bmp.Width :=RichEdit1.Width;

// 下翻:RichEdit1.Perform(WM_VSCROLL,SB_PAGEDOWN,0);
// 上翻:RichEdit1.Perform(WM_VSCROLL,SB_PAGEUP,0);

SendMessage(RichEdit1.Handle,WM_VSCROLL,SB_TOP,0);
RichEdit1.SelStart := 0;
RichEdit1.SelLength:=0;
RichEdit1.SetFocus;

// if iM = 65536 then SendMessage(RichEdit1.Handle,EM_SCROLL, SB_top,0);
//如果返回值大于65536,则返回值与65536的差值就是滚动的行数

iM := 65537; //赋初值
i:=3;
while iM > 65536 do
begin //? 是否有问题呢
bitblt(bmp.Canvas.Handle,0,0,bmp.Width,bmp.Height,FrmPublishMessage.Canvas.Handle,RichEdit1.Left,RichEdit1.Top,srccopy);
bmp.SaveToFile(ExtractFilePath(application.ExeName )+'DISP'+formatfloat('0',i)+'.bmp');

sleep(1000);
iM := RichEdit1.Perform(EM_SCROLL, SB_PAGEDOWN ,0);
RichEdit1.SelStart := 0;
RichEdit1.SelLength:=0;
RichEdit1.SetFocus;
showmessage(inttostr(im-65536));
if im=65536 then break;
i:=i+1;
end;
bmp.Free;
无条件为你 2008-06-20
  • 打赏
  • 举报
回复
procedure ScreenShot(hWindow: HWND; bm: TBitmap);
var
Left, Top, Width, Height: Word;
R: TRect;
dc: HDC;
lpPal: PLOGPALETTE;
begin
if not IsWindow(hWindow) then Exit;
GetWindowRect(hWindow, R);
Left := R.Left;
Top := R.Top;
Width := R.Right - R.Left;
Height := R.Bottom - R.Top;
bm.Width := Width;
bm.Height := Height;
dc := GetDc(0);
if dc=0 then Exit;
if (GetDeviceCaps(dc, RASTERCAPS) and
RC_PALETTE = RC_PALETTE) then begin
GetMem(lpPal, SizeOf(TLOGPALETTE) +(255 * SizeOf(TPALETTEENTRY)));
FillChar(lpPal^,SizeOf(TLOGPALETTE) +(255 * SizeOf(TPALETTEENTRY)),#0);
lpPal^.palVersion := $300;
lpPal^.palNumEntries := GetSystemPaletteEntries(dc,0,256,lpPal^.palPalEntry);
if (lpPal^.PalNumEntries <> 0) then begin
bm.Palette := CreatePalette(lpPal^);
end;
FreeMem(lpPal, SizeOf(TLOGPALETTE) + (255 * SizeOf(TPALETTEENTRY)));
end;
BitBlt(bm.Canvas.Handle,0,0,Width,Height,Dc,Left,Top,SRCCOPY);
ReleaseDc(0, dc);
end;

procedure TForm1.Button1Click(Sender: TObject);
var b: TBitMap;
begin
b := TBitmap.Create;
ScreenShot(RichEdit1.Handle, b);
Image1.Picture.Bitmap := b;
b.Free;
end;


上面的代码可以实现,不过缺点是如果RichEdit1内容太多或者被隐藏了,就抓不到了。目前我还没有办法得到完美解决效果。

关注你的问题。
jianjian007 2008-06-20
  • 打赏
  • 举报
回复

先谢谢楼上的兄弟了.
你那方法不行!
问题还是没有解决.继续等待!
gyk120 2008-06-19
  • 打赏
  • 举报
回复
这是一个图形的处理控件,可以用来插入图片
jianjian007 2008-06-19
  • 打赏
  • 举报
回复

RxRichEd
是什么控件?
gyk120 2008-06-18
  • 打赏
  • 举报
回复
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, RxRichEd;
需要这些单元
jianjian007 2008-06-18
  • 打赏
  • 举报
回复

没有这个东西吧?
或者要引入什么单元?
gyk120 2008-06-18
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
bmp: TBitmap;
begin
RtfToBitmap('c:\xx.bmp', Form1.Handle, 256, 64, bmp);
end;
试试这个

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧