delphi截取图片是黑色问题?(200分)

  • 主题发起人 主题发起人 taimoly
  • 开始时间 开始时间
T

taimoly

Unregistered / Unconfirmed
GUEST, unregistred user!
各位兄弟,我用
myBmp.Canvas.CopyRect(rect,myCanvas,Rect);
myBmp.SaveToFile( );
保存后怎么是一个看不见的黑色图片。请问怎么解决?重谢!
 
怎搞不懂,这个和DELPHI有什么关系了?
是你的代码有问题,或者是在你抓图的时候根本就抓不下来,比如在放DVD,或者VCD
 
同意楼上观点,把你的代码贴出来
 
贴代码有什么用,我的帖子
http://www.delphibbs.com/delphibbs/dispq.asp?lid=691468
都几年了.也没见什么好办法.
 
检查一下mybmp.canvas.copymode是否设置过
或者copy的rect的位置是否在源图象之外
感觉是你的程序的问题
 
兄弟们,我的程序没有问题,我是在截取mdplayer的屏幕时,发生的问题。
 
很正常,mediaplayer用了DX锁了DC,你是抓不到图的
 
在窗体上先放个image将myBmp显示在image上看看,再保存。
 
放一个image将myBmp显示在image上还是不行。
 
没人说你的程序有问题,你仔细看看我的帖子就知道为什么了.
 
用form.Canvas.CopyRect(rect,form.Canvas,Rect)是可以的,只不过要计算好
位置
 
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;
Image.Picture.Bitmap.SaveToFile('c:/1.bmp');
Bmp.free;
//释放bitmap
end;

 
我也做了类似的实验,不过我抓的是mediaplay播放的mpg图象,道理类似。
在win2k下没问题,到瘟酒吧下就嘿嘿了。我也不知道为什么!!
 
楼主,是要截取mediaplayer播放的视频文件的图片吗?是的话我有代码贴出来共享一下:
var MyBmp : TBitmap;
MyCanvas : Tcanvas;
dc : Hdc;
rect : TRect;
begin

if N15.Checked=True then

Mediaplayer1.Pause;
Timer2.Enabled:=False;
Mediaplayer1.DisplayRect:=epImagePanel1.ClientRect;
myBmp := TBitMap.Create
MyCanvas := TCanvas.Create
rect := mediaPlayer1.DisplayRect
Dc := GetDc(epImagePanel1.Handle);
myCanvas.Handle := Dc;
myBmp.Width := rect.Right+5+rect.Left-10
myBmp.Height := rect.Bottom+5+rect.Top-10
myBmp.Canvas.CopyRect(rect,myCanvas,Rect);
if Savedialog1.Execute then

Try
myBmp.SaveToFile(Savedialog1.FileName+'.bmp');
ReleaseDC(0,dc);
myBmp.Free;
myCanvas.Free;
Mediaplayer1.Play;
Timer2.Enabled:=True;
Except
Timer2.Enabled:=True;
Mediaplayer1.Play;
end;

end;

首先定义好mediaplayer的displayrect,再计算好图片的大小之后截取就行了![:D][red][/red]
 
都没有一个好的。来,看我的。发给你。
 
接受答案了.
 
后退
顶部