大家帮帮我把,我快要发疯了?为什么抓取屏幕上的图象都是兰色的?(50分)

  • 主题发起人 主题发起人 蔓草
  • 开始时间 开始时间

蔓草

Unregistered / Unconfirmed
GUEST, unregistred user!
我用10moon2000采集卡采集vcd上的图象,本来我的程序是好好的,用抓取屏幕
图象的办法来采集一个图片,可以采集的到。但是我重新安装系统以后,
我发现我的程序采集到的图片都是兰色的了,究竟是什么原因呢,求求大家帮
我找找是什么原因,是不是我少装了什么东西??????
我又测试了几次,我发现在win2000 advance server下就是好的,win2000其他版本
和98中就不行,这个究竟是什么原因,大家也可以看看,播放一个vcd的时候,按
printscreen键抓出一个图象,在win2000 advance server里面就有vcd的图象,
在其它版本的windows里,vcd的本分就是蓝图,是怎么一回事情????
请大家指教?
 
Try This:
http://it.lycos.com.cn/arts/itzj/itzjjj/itzjjjqt/78423.html
超级拷屏键
( 2001-08-07 11:05:43 ) 人民网
  各位朋友,您知道键盘上PrintScreenSysRq(拷屏键)吗?您用它抓图吗?什么?
功能太弱?不能抓DirectX游戏图片?改用专业抓图软件了? 没有必要嘛,其实拷屏键
还是可以很强大的。好了,我们一起来让它变身吧。
  在伸手不见五指的夜晚,玩着“生化危机2”,看着美丽(恐怖?)的CG画面,迅速
按下Print Screen抓图,到剪贴版粘贴一看,全黑,使用某抓图软件,照旧。这样的经
历很多人有过吧(胡说,我只在白天玩“生化危机”)。
  确实,对于一些使用 DirectX的游戏很难抓下图来(过场动画就更别提了),实际
上,我们只要在“媒体播放机”中稍稍一改即可(似乎风马牛不相及,但事实证明是可
行的),win98自带的版本太低,需要6.0版及其以上版本的,就是“微软”白送的那个
,好多地方都可以找到。
  用“媒体播放机”打开一个视频文件,进入File(文件)中的Properties(性质)
,选Advanced(高级的),双击Video Renderer(视频给于),在DirectDraw中把YUV
Flipping、RGB Flipping、YUV Overlays、RGB Overlays四个选项的钩钩都去掉,确
定后退出。好了,现在您的Print Screen是无敌于天下的,甭管游戏画面还是CG动画
,反正是爱抓哪儿抓哪儿。顺便说一句,在“媒体播放机”的View(观察)Options (选
项)/Advanced(高级的)选项卡中,点击Change(更改),将 Buffer(缓冲)从10改为30
,可以使“媒体播放机”播放大画面Avi流畅的多。
  有朋友可能要问,游戏是成了,但超级解霸播的VCD用 Print Screen 拿下就成了
一片粉红色?超级解霸虽然自带抓图但我偏不爱用。(存心抬杠?不怕,我还有招。
) 其实很简单,同时打开两个超级解霸播VCD,然后把先打开的那个关上,这时您就
可以用Print Screen抓个痛快了。
 
但是我在程序里怎么样抓呀?我用的是一个采集卡提供的ocx控件
 
DeskHWnd := GetDeskTopWindow;
dc := GetDC(DeskHWnd);
ScreenWidth := GetDeviceCaps(dc,HORZRES);
ScreenHeight := GetDeviceCaps(dc,VERTRES);
TheBmp := TBitmap.Create;
TheBmp.Width :=640;
TheBmp.Height := 480;
TheBmp.IgnorePalette :=true;
TheBmp.PixelFormat := pf24bit;
BitBlt(TheBmp.Canvas.Handle, 0,0,640,480,dc, form1.left+5,form1.top+24,SRCCOPY);
Image1.Picture.Bitmap := TheBmp;
Application.ProcessMessages;

TheBmp.Free;
ReleaseDC(DeskHWnd, dc);
// We need a filename to save it to.

// edit1.text:='end';
FName := ExtractFilePath(Application.Exename) + 'capture.bmp';
// Lets save the bitmap to a file.
Image1.Picture.Bitmap.SaveToFile(FName);
end;

或者模拟print screen键
var i:integer;

keybd_event(VK_SNAPSHOT,i,0,0);
//i=0 means print the active window
//i=1 means print full screen
 
再转贴一篇:
用 画 布(Tcanvas)
对 象 封 装 了Windows 的 大 部 分 图 形
输 出 功 能, 这 使 得 我 们 可 以 通 过 他 以 更 直 观 的
方 式 和Windows 的 屏 幕 打 交 道,
而 不 必 关 心 令 人 头 疼 的Windows API 函 数。 下 面 的
一 小 段 程 序 就 可 以 实 现 整 个
屏 幕 的 图 象 拷 贝 了。
var //变量声明
Fullscreen:Tbitmap;
FullscreenCanvas:TCanvas;
dc:HDC;
//-------------------------------------------------------
-----
DC := GetDC (0); //取得屏幕的 DC,参数0指的是屏幕
FullscreenCanvas := TCanvas.Create; //创建一个CANVAS对

FullscreenCanvas.Handle := DC; //将屏幕的DC赋给
HANDLE
Fullscreen.Canvas.CopyRect
(Rect (0, 0, screen.Width,screen.Height),
fullscreenCanvas,
Rect (0, 0, Screen.Width, Screen.Height));
//把整个屏幕复制到BITMAP中
FullscreenCanvas.Free; //释放CANVAS对象
ReleaseDC (0, DC); //释放DC
//SCREEN对象是DELPHI预先定义的屏幕对象,直接使用就行了。
 
10moon2000 天敏的摄像头实在是太差了,提供的开发包也不全,少一个DLL文件(ocx控件功能太少,打算直接调DLL,没想到dll没有给[:(!])
还是买个贵点的吧,最好国外货,其次用台湾货,大陆货就是差
 
dingbaosheng你够下流的,居然偷偷看黄色电影,这下被老子抓到了吧!呵呵
 
方法1。好像装上directx8.0就行了。
方法2。懂直接写屏(就像netmeeting)
 
多人接受答案了。
 
To:一个过客
KAO 是么,毁坏名誉可要负责任的哟。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
598
import
I
后退
顶部