今天突然想在Timage控件上作图,自然是想到此控件里的bitmap于是有以下代码片段:
image1.Picture.Bitmap.Canvas.TextOut(0,0,'abc');
结果什么也没得到,后来用image1.Canvas.TextOUt(0,0,'abc')终于输出了'abc'三个字母,为什么用刚才那句不能输出想要的内容呢?原来是Bitmap没有设置宽和高,所以应该这样做:
image1.Picture.Bitmap.width := 200;//设置位图的宽
image1.Picture.Bitmap.height := 220;//设置位图的高
image1.Picture.Bitmap.Canvas.TextOut(0,0,'abc');//这回可以输出内容了。
如果想清除位图上的内容,用image1.Picture.Bitmap.assign(nil);就可以了。不过,用了这句之后,image.Canvas.TextOut(0,0,'abc')却无法输出内容了,再用上面那三句才可以输出内容,所以,以后想在Timage控件上作图要么就新建一个Bitmap设好宽和高画好图,assign给Timage,要不就用上面那三句。
另外:
1.如果用Timage.Picture的assign方法给Timage赋了图,就不能在Canvas上画图了,如果想给先赋一张图,然后在这张图上画图就要用Draw的方法给image1.Picture.Bitmap画上去,然后再画自己想画的图。
2.如果用Timage.Picture的assign依法给Timage赋了图,Timage设置stretch为真,实际图片的大小与Timage的大小不一致时,想用BrushCopy或CopyRect时就要注意,因为实际图片大小与显示的不一致,所以复制到的内容可能与想要的内容不一致,这时就要把实际图片以Timage的大小画过去。
主要用到以下两个函数:
(1)SetStretchBltMode(newmybmp.Canvas.Handle,HalfTone);
(2)StretchBlt(newmybmp.Canvas.Handle,0,0,newidth,newheight,
oldmybmp.Canvas.Handle,0,0,oldwidth,oldhdight,SRCCOPY);