截取,涂鸦当前屏幕?(300分)

  • 主题发起人 主题发起人 SugarXP2
  • 开始时间 开始时间
S

SugarXP2

Unregistered / Unconfirmed
GUEST, unregistred user!
1.把当前屏幕截下,并载入Image中
2.用Canvas涂鸦Image(这有点难,我发现已载入图的Image画不了)
 
怎么会画不了?截图应该是位图吧
with Image.Picture.Bitmap.Canvas do
想怎么画就怎么画;
 
做一个透明的窗体
AlphaBlend := true
AlphaBlendvalue := 4(再小好像不太好)
然后在窗体上涂鸦?能行否?
 
你是想做桌面涂鸦程序吧?陈宽达的《深度历险》里面有此示例,需要的话请来信说
明,我发给你!coolqiang@163.net
 
你要的我都有例子,你的email,我发给你
 
能否发一个给我?
zzgyf@yeah.net
谢谢前辈
 
都可以这么讲,但涂鸦后要保存图片。
mmxsugar@21cn.com
 
save iamge.canvas to image
 
Delphi园地有
定时抓取活动窗口 10KB
与Delphi深度历险源码请参考
http://mydelphi.8u8.com/ym.htm

 
procedure TForm1.CopyScreenToBmp(var Image:TImage);
var
Bmp:Tbitmap;
Canvas:TCanvas;
DC:HDC;
begin
Bmp := TBitmap.Create; //创建一个BITMAP来存放图象
Bmp.Width := screen.width; //设置图片大小与屏幕在小一致
Bmp.Height := screen.Height;
DC := GetDC (0); //取得屏幕的 DC
Canvas := TCanvas.Create; //创建一个CANVAS对象
Canvas.Handle := DC; //把句柄指向屏幕
//把整个屏幕复制到BITMAP中
Bmp.Canvas.CopyRect(Rect (0, 0, screen.Width, screen.Height),
Canvas,
Rect (0, 0, Screen.Width, Screen.Height));
Canvas.Free; //释放CANVAS对象
ReleaseDC (0, DC); //释放DC

Image.picture.Bitmap:=Bmp; //拷贝下的图象赋给IMAGE对象
Image.Width:=Bmp.Width; //设置Image的大小对捕捉到的图片大小一致
Image.Height:=Bmp.Height;
Bmp.free; //释放bitmap
end;
 
注意,还要在截了图的Image上涂鸦,并保存下了。
我发现 Image.picture.Bitmap:=Bmp;这后,就画不了image了。
 
Image.picture.Bitmap:=Bmp 只是赋一个指针,
用 Canvas 的 CopyRect 方法直接把屏幕图象拷贝到
Image.Picture.Bitmap.Canvas中不就行了。

 
thanks to all:
前两个问题都解决了,一个问题100分,现有第三点想请教下(100分):
3.就是在可以刷掉刚才涂鸦的内容(注意:image已载入底图了,刷子要不影响底图)
 
你知道FLASH怎么实现第三个的吗?让刷子不影响原图,就是需要有图层,我想图层是一个缓冲地方好好保存啊。
 
再用一个 TBitmap 对象保存背景,要刷掉刚才涂鸦的内容时,
用保存的背景图片恢复。
[:)]方法是笨了点儿,但管用。
 
我是讲要一笔笔来刷
 
还是笨方法,用背景图片一块一块地替换。
 
那怎样取小块的背景,并用作刷子呢?
还是有其它更好的方法?
 
我看这个问题才是最难了,谁给出答案,我给200分~。
 
还是用 Canvas 的 CopyRect 方法,它的三个参数:
Dest: TRect; 指向目标区;
Canvas: TCanvas; 保存源图的Canvas;
Source: TRect; 指定源图上的一块;
 

Similar threads

D
回复
0
查看
822
DelphiTeacher的专栏
D
D
回复
0
查看
765
DelphiTeacher的专栏
D
D
回复
0
查看
717
DelphiTeacher的专栏
D
D
回复
0
查看
848
DelphiTeacher的专栏
D
D
回复
0
查看
788
DelphiTeacher的专栏
D
后退
顶部