DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jeff1314
今日帖子: 10
在线用户: 3
导航: 论坛 -> 移动应用开发 斑竹:flyers,iamdream  
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2020/12/8 10:50:15
标题:
如何在动态创建bitmap,并在上面写字? 浏览:1757
加入我的收藏
楼主: 请教下,如何 在 firemonkey下 创建一个bitmap ,并把这个bitmap设置为白底,在上面一黑色的雅黑的字?
----------------------------------------------
-把学习当信仰
作者:
男 looper (keyo) ★☆☆☆☆ -
盒子活跃会员
2020/12/8 14:09:47
1楼: procedure TForm1.FormCreate(Sender: TObject);
begin
  bmp:= TBitmap.Create;
  bmp.SetSize(100, 200);
  bmp.Clear(TAlphaColorRec.White);  //bmp为白底
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  freeandnil(bmp);
end;

procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);
begin
  canvas.Clear(TAlphaColorRec.Black);
  canvas.DrawBitmap(bmp, RectF(0,0,100,200), RectF(10,10,110,210), 1.0);
  //
  canvas.Font.Family:= 'Microsoft YaHei'; //指定字体
  canvas.Fill.Color:= TAlphaColorRec.Black;  //绘制的文字颜色
  canvas.FillText(RectF(10,10,110,210), 'hello firemonkey', true, 1.0, [], TTextAlign.Center);  //在bmp区域绘制文字
end;
此帖子包含附件:
PNG 图像
大小:7.8K
----------------------------------------------
虽千万人吾往矣!
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2020/12/8 15:10:33
2楼: 感谢楼上兄弟,我试下
----------------------------------------------
-把学习当信仰
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2020/12/8 15:20:55
3楼:   aBitMap := TBitmap.Create;

  try
    with aBitMap do
    begin
      SetSize(384, 220);
      Clear(TAlphaColors.White);
      canvas.DrawBitmap(aBitMap, RectF(0, 0, 100, 200), RectF(10, 10, 110, 210), 1.0);   //
      canvas.Font.Family := 'Microsoft YaHei'; //指定字体
      canvas.Fill.Color := TAlphaColorRec.Black;  //绘制的文字颜色
      canvas.FillText(RectF(10, 10, 110, 210), 'hello firemonkey', true, 1.0, [], TTextAlign.Center);  //在bmp区域绘制文字

    end;

如果我不在formpaint中写,像上面这样的话,不会输出东西 @keyo
----------------------------------------------
-把学习当信仰
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2020/12/8 15:51:38
4楼: 我想封装成一个函数
----------------------------------------------
-把学习当信仰
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2020/12/8 16:16:18
5楼: 我需要动态创建,在内存中写好一些字,要在线程 中 操作,这样有没有问题
----------------------------------------------
-把学习当信仰
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2020/12/8 16:32:33
6楼: function GetBitmap:Tbitmap ;
var
  aBitMap: TBitmap;
  aBitmapData: TBitmapData;
  i, j: Integer;
  pobj: TPrintOBJ;
  lFileName: string;
  img: TImageViewer;
  Rect: TRectF;
  lbl: TLabel;
begin
  aBitMap := TBitmap.Create;
  lbl := TLabel.Create(nil);

  try
    with aBitMap do
    begin
      SetSize(384, 220);
      Clear(TAlphaColors.White);
    end;

    lbl.Canvas.DrawBitmap(aBitMap, TRectF.Create(0, 0, 100, 200), TRectF.Create(10, 10, 110, 210), 1.0);   //  这里出错
    lbl.Canvas.Font.Family := 'Microsoft YaHei'; //指定字体
    lbl.Canvas.Fill.Color := TAlphaColorRec.Black;  //绘制的文字颜色
    lbl.Canvas.Font.Size := 14;
    lbl.Canvas.FillText(TRectF.Create(10, 10, 110, 210), 'hello firemonkey', true, 1.0, [], TTextAlign.Center);  //在bmp区域绘制文字
 
    Result := aBitMap;
  finally
    lbl.Free;
  end;


为什么这样写会出av错误?
----------------------------------------------
-把学习当信仰
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2020/12/8 17:09:26
7楼: function GetBitmap:Tbitmap ;
var
  aBitMap, bmp: TBitmap;
  aBitmapData: TBitmapData;
  i, j: Integer;
  pobj: TPrintOBJ;
  lFileName: string;
  img: TImageViewer;
  Rect1, Rect2, Rect3: TRectF;
begin
  aBitMap := TBitmap.Create;
  bmp := TBitmap.Create;

  try
    with aBitMap do
    begin
      SetSize(384, 220);
      Clear(TAlphaColors.White);
    end;
    with bmp do
    begin
      SetSize(384, 220);
      Clear(TAlphaColors.white);
    end;
    Rect1 := trectf.Create(0, 0, 100, 200);
    Rect2 := trectf.Create(10, 10, 100, 200);
    Rect3 := trectf.Create(10, 10, 110, 210);
    ////////
    bmp.Canvas.DrawBitmap(aBitMap, Rect1, Rect2, 1.0);   //
    bmp.Canvas.Font.Family := 'Microsoft YaHei'; //指定字体
    bmp.Canvas.Fill.Color := TAlphaColorRec.Black;  //绘制的文字颜色
    bmp.Canvas.Font.Size := 14;
    bmp.Canvas.FillText(Rect3, 'hello firemonkey', true, 1.0, [], TTextAlign.Center);  //在bmp区域绘制文字
     Result := aBitMap;
  finally
    bmp.Free;
  end;

我换成用两bitmap来写,这样不会出错,但是要打印的文字看不到,哪步出了问题?
----------------------------------------------
-把学习当信仰
作者:
男 looper (keyo) ★☆☆☆☆ -
盒子活跃会员
2020/12/8 18:42:21
8楼: 这个是用canvas绘制的,要放在onpaint里面。
多线程渲染我没试过,但是你可以定义个线程安全的对象,多个线程往这个对象写数据。在onpaint里面取这个对象的数据进行渲染,但是要加TMotior.Enter和TMotior.Leave这种代码。具体的我没做过,也没试过,你试看看。
----------------------------------------------
虽千万人吾往矣!
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2020/12/8 19:30:47
9楼: 我是要 动态创建一幅图片,上面要随机的写几个,再返回这个图片
----------------------------------------------
-把学习当信仰
作者:
男 looper (keyo) ★☆☆☆☆ -
盒子活跃会员
2020/12/9 11:25:55
10楼: 那你就不要搞那么麻烦了,你在窗口上拖个TImage和TText,把TText挂在TImage下,然后设置TImage的背景,设置TText的文字内容和字体风格。
最后调用下面代码,把TImage区域截屏就好了。

Image1.MakeScreenshot.SaveToFile('c:\1.bmp');

弄来弄去就这些代码,也没啥特殊的。你还有其他需求,就自己去研究一下就好了。
----------------------------------------------
虽千万人吾往矣!
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2020/12/10 11:34:52
11楼: 唉,这个问题有什么困难?
这楼预览,代码楼下:
此帖子包含附件:
PNG 图像
大小:5.1K
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2020/12/10 11:36:08
12楼: 这楼代码:
此帖子包含附件:sail2000_2020121011368.zip 大小:30.8K
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 akai1203 (w-dins) ★☆☆☆☆ -
普通会员
2020/12/13 11:38:40
13楼: 感谢楼上
----------------------------------------------
-把学习当信仰
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行126.9531毫秒 RSS