帮个忙. 怎样在图象上贴文字(300分)

  • 主题发起人 王寒松
  • 开始时间
学习!

我提~

 
只要处理好重绘就好了嘛,easy
 
只要直接在你图片的Canvas的指定位置调用Textout就可以了,我以前做vod系统就是这样
啊,因为那时还要用到查账,每次从数据库取数据,在固定位置输出,然后保存为图片,
再是MPG-1,然后播出
如果你是JPG,是否,需要Assign 到TBitmap,然后。。。
 
对,漏了重要的一点,lvxq的这一点:
//如果你是JPG,是否,需要Assign 到TBitmap,然后。。。
 
不过我现在想想,觉得还是要TImage + TLabel做,理由如下:
1。Txtout的字体不是很好,
2。上面的方法一旦输出,没法再控制位置,而在添加不同注释时,由于语句的
长短不一,可能也需要不同的位置输出,因此TImage+TLabel是最理想的。尤其你可以处理
TLabel的拖动事件,让它可以移动到相应位置,而字体,颜色也可以很好的解决。
如果你采用这种方法,你可以这样的形式保存文件。比如
Graphics::TBitamp * Bitmap1=new Graphics::TBitmap
Bitmap1->GetFormImage();
Bitmap1->PixelsFormat.....
Bitmap1->TranseParentColor=0x02ffffff;
Bitmap1->SaveToFile..
完美制作
 
请问怎么移动label及在图象的的label镜子图象
 
canvas.textout(...)(Pls. refer to the help docs)
 



如何输出半透明文字????????



 
我用卷帮主给的TJanDrawText 完成了这个工作。同时发现了问题的所在:
我用的envision Lib图像控件表面上是用 ImageScrollBox.FImage.Picture.Bitmap
显示图像。 实际上它保存数据是用 ImageScrollBox.Graphic (继承自 TGraphic)
所以它一进行 Redraw 操作(大概就是把Graphic的内容重新绘制到 FImage.Pictrue.bitmap)
图像显示就恢复原样了。

现在又有了新问题。 我如何选择一个位图或ICON 贴到原图上.
这个问题我再给300。
 
var rbmp:tbitmap;
begin
rbmp:=tbitmap.Create;
rBmp.loadfromfile('c:/a.bmp'); // 这个是要贴入的位图
image1.picture.bitmap.canvas.draw(0,0,rbmp); //贴到image1中去
rbmp.free;
end;

解决给我300分!
如何输出半透明文字????????
 
kiss2: no! no! 我要的是将从磁盘上选择的bmp或jpg,gif,ico 混合到原图里去
本想新开个问题发分, 又怕人气不够。 所以这里接着问
 
晕,这不是你正要的吗?
var rbmp:tbitmap;
begin
rbmp:=tbitmap.Create;
rBmp.loadfromfile('c:/a.bmp'); // 从磁盘中选择个BMP文件
image1.picture.bitmap.loadfromfile('c:/s.bmp');//打开原图
image1.picture.bitmap.canvas.draw(0,0,rbmp);
image1.picture.bitmap.savefromfile('c:/s.bmp');//保存原图
rbmp.free;
end;
 
>1、现在又有了新问题。 我如何选择一个位图或ICON 贴到原图上.
>2、我要的是将从磁盘上选择的bmp或jpg,gif,ico 混合到原图里去
王大侠说得不是很清楚么。
如果按照1,那么可以用BitBlt()来实现;
如果按照2,其实是AlphaBlend的概念,就是说将两幅图象融合在一起。
 
var rbmp:tbitmap;
begin
rbmp:=tbitmap.Create;
rBmp.loadfromfile('c:/a.bmp'); // 从磁盘中选择个BMP文件
image1.picture.bitmap.loadfromfile('c:/s.bmp');//打开原图
image1.picture.bitmap.canvas.copymode:=;;;;//这个地方我忘了用哪个了,你试试就行了,我以前就这样做的:)
image1.picture.bitmap.canvas.draw(0,0,rbmp);
image1.picture.bitmap.savefromfile('c:/s.bmp');//保存原图
rbmp.free;
end;
祝你成功!
 
用photoshop
 
是不是这样?
var
Form1: TForm1;
BackColor:TColor;
implementation

{$R *.DFM}

procedure Tform1.DrawTrans(DestCanvas: TCanvas; X,Y: smallint; SrcBitmap:
TBitmap; AColor: TColor);
var ANDBitmap, ORBitmap: TBitmap;
CM: TCopyMode;
Src: TRect;
begin
ANDBitmap:= nil;
ORBitmap:= nil;
try
ANDBitmap:= TBitmap.Create;
ORBitmap:= TBitmap.Create;
Src := Bounds(0,0, SrcBitmap.Width, SrcBitmap.Height);
with ORBitmap do begin
Width:= SrcBitmap.Width;
Height:= SrcBitmap.Height;
Canvas.Brush.Color := clBlack;
Canvas.CopyMode := cmSrcCopy;
Canvas.BrushCopy(Src, SrcBitmap, Src, AColor);
end;
with ANDBitmap do begin
Width:= SrcBitmap.Width;
Height:= SrcBitmap.Height;
Canvas.Brush.Color := clWhite;
Canvas.CopyMode := cmSrcInvert;
Canvas.BrushCopy(Src, SrcBitmap, Src, AColor);
end;
with DestCanvas do begin
CM := CopyMode;
CopyMode := cmSrcAnd;
Draw(X,Y, ANDBitmap);
CopyMode := cmSrcPaint;
Draw(X,Y, ORBitmap);
CopyMode := CM;
end;
finally
ANDBitmap.Free;
ORBitmap.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
DrawTrans(Image1.Canvas,StrToInt(Edit1.text),StrToInt(Edit2.text),Image2.Picture.Bitmap,BackColor);
end;
procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
backColor:=Image2.Canvas.Pixels[x,y];
Panel1.Color:=backColor;
end;
 
var rbmp:tbitmap;
begin
rbmp:=tbitmap.Create;
rBmp.loadfromfile('c:/a.bmp'); // 从磁盘中选择个BMP文件
image1.picture.bitmap.loadfromfile('c:/s.bmp');//打开原图
image1.picture.bitmap.canvas.CopyMode:=cmsrcand;
image1.picture.bitmap.canvas.draw(0,0,rbmp);
image1.picture.bitmap.savefromfile('c:/s.bmp');//保存原图
rbmp.free;
end;
祝你成功!

 
不好意思,借用你的,:)因为你在我的帖子上说了可以解决我的问题,请去看看
http://www.delphibbs.com/delphibbs/dispq.asp?LID=996240
谢谢!
 

Similar threads

回复
0
查看
865
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部