|
|
导航: |
论坛 -> 移动应用开发
斑竹:flyers,iamdream |
|
作者: |
|
2020/12/8 10:50:15 |
标题: |
如何在动态创建bitmap,并在上面写字? |
浏览:1757 |
|
加入我的收藏 |
楼主: |
请教下,如何 在 firemonkey下 创建一个bitmap ,并把这个bitmap设置为白底,在上面一黑色的雅黑的字?
----------------------------------------------
-把学习当信仰 |
作者: |
|
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;
此帖子包含附件:
大小:7.8K |
----------------------------------------------
虽千万人吾往矣!
|
作者: |
|
2020/12/8 15:10:33 |
2楼: |
感谢楼上兄弟,我试下
----------------------------------------------
-把学习当信仰
|
作者: |
|
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
----------------------------------------------
-把学习当信仰
|
作者: |
|
2020/12/8 15:51:38 |
4楼: |
我想封装成一个函数
----------------------------------------------
-把学习当信仰
|
作者: |
|
2020/12/8 16:16:18 |
5楼: |
我需要动态创建,在内存中写好一些字,要在线程 中 操作,这样有没有问题
----------------------------------------------
-把学习当信仰
|
作者: |
|
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错误?
----------------------------------------------
-把学习当信仰
|
作者: |
|
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来写,这样不会出错,但是要打印的文字看不到,哪步出了问题?
----------------------------------------------
-把学习当信仰
|
作者: |
|
2020/12/8 18:42:21 |
8楼: |
这个是用canvas绘制的,要放在onpaint里面。 多线程渲染我没试过,但是你可以定义个线程安全的对象,多个线程往这个对象写数据。在onpaint里面取这个对象的数据进行渲染,但是要加TMotior.Enter和TMotior.Leave这种代码。具体的我没做过,也没试过,你试看看。
----------------------------------------------
虽千万人吾往矣!
|
作者: |
|
2020/12/8 19:30:47 |
9楼: |
我是要 动态创建一幅图片,上面要随机的写几个,再返回这个图片
----------------------------------------------
-把学习当信仰
|
作者: |
|
2020/12/9 11:25:55 |
10楼: |
那你就不要搞那么麻烦了,你在窗口上拖个TImage和TText,把TText挂在TImage下,然后设置TImage的背景,设置TText的文字内容和字体风格。 最后调用下面代码,把TImage区域截屏就好了。
Image1.MakeScreenshot.SaveToFile('c:\1.bmp');
弄来弄去就这些代码,也没啥特殊的。你还有其他需求,就自己去研究一下就好了。
----------------------------------------------
虽千万人吾往矣!
|
作者: |
|
2020/12/10 11:34:52 |
11楼: |
唉,这个问题有什么困难? 这楼预览,代码楼下:
此帖子包含附件:
大小:5.1K |
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
|
作者: |
|
2020/12/10 11:36:08 |
12楼: |
这楼代码:
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
|
作者: |
|
2020/12/13 11:38:40 |
13楼: |
感谢楼上
----------------------------------------------
-把学习当信仰
|
|