我看到例子都是这样保存一帧图片的,sendmessage(hWndC, WM_CAP_SAVEDIB, 0, longint(pchar('f:\2.bmp')));有没有其他的办法能把一帧图片保存到内存流中或者image1控件中,或者其他变通的办法?
解决方案 »
- 我想对dbf数据表进行操作,可是使用Table连接不能打开?
- 请问怎么做到一次传送多个文件?
- 用erp,mrp系统,delphi+SQL两层结构,多人开发,比如说有总控模块,销售、生产等,大家一般的思路是什么?
- 关于数据库中表名查找的问题!
- delphi控制excel的问题
- ********高价购中小型超市用系统软件(前台+后台),要求有源代码! 速速!*******
- 当DBGrid中某一纪录的字段值更改时,纪录在Grid中颜色随之变化,如果能让更改的字段的颜色变化就更好了。
- Field.AsInteger:=no;改变数据库中的数据
- 征求一个解决办法?
- Delphi中的Socket问题(高分悬赏)!!!
- 动态改变dbgrid的标题栏
- 新年第一帖,祝各位D友们新年新气象,:)
The WM_CAP_PAL_SAVE message saves the current palette to a palette file. Palette files typically use the filename extension .PAL. You can send this message explicitly or by using the capPaletteSave macro.WM_CAP_PAL_SAVE
wParam = (WPARAM) 0;
lParam = (LPARAM) (LPVOID) (LPSTR) (szName); but WM_CAP_SAVEDIB: it's not defined , can't find it's define...
用file实现.
var
bmp: TBitmap;
begin
bmp := TBitmap.Create; //假设你需要截取的图象大小为100×100
bmp.Width := panel1.width;
bmp.Height := panel1.height;
BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height,
getdc(panel1.handle), 0, 0, SRCCOPY); //截取image1中从x,y开始的100×100的图象
image1.Picture.Bitmap.Assign(bmp); //保存在bmp中
image1.Picture.Bitmap.SaveToFile('c:\1.bmp');
bmp.free;
bmp:=nil;
end;上面是将PANEL1中的内容以非sendmessage的形式保存成图片的过程。而下面的就是VFW的初始化,注意capCreateCaptureWindow函数的参数,很重要:
procedure TForm1.suiButton1Click(Sender: TObject);
begin
try
ghyghost_cap_handle := capCreateCaptureWindow(
'my video cap',
WS_CHILD + WS_VISIBLE + WS_EX_CLIENTEDGE + WS_EX_DLGMODALFRAME,
0,
0,
Panel1.Width,
Panel1.Height,
Panel1.Handle,//这个参数就是想在哪个控件中进行VFW映射的,这里选择panel1。
0);
if (capDriverConnect(ghyghost_cap_handle, 0)) <> 0 then
begin
CapPreviewRate(ghyghost_cap_handle, 30);
CapPreview(ghyghost_cap_handle, 1);
end;
except
showmessage('you video cap bad');
end;
SendMessage(ghyghost_cap_handle, WM_CAP_SET_SCALE, WParam(true), 0);
end;
我这里有:
这是一个过程,功能是把图片保存到path路径下,如果你要保存到image中,你就从这个临时路径中load就OK了,不知道这样你满意吗?
================
procedure SaveCapImage(path:string);export;
begin
if ghCapWnd<>0 then
begin
SaveDialog.DefaultExt:='bmp';
Savedialog.Filter:='Bitmap Files (*.Bmp)|*.bmp';
if SaveDialog.Execute then
Sendmessage(ghCapWnd,WM_CAP_FILE_SAVEDIB,0,Longint(Pchar(path)));
end;
end;
应该是下面的
==================================
你说的就是抓图对吗?
我这里有:
这是一个过程,功能是把图片保存到path路径下,如果你要保存到image中,你就从这个临时路径中load就OK了,不知道这样你满意吗?
================
procedure SaveCapImage(path:string);export;
begin
if ghCapWnd<>0 then//补充:这个句柄是你开始创建的哦,创建过程见下一段代码
Sendmessage(ghCapWnd,WM_CAP_FILE_SAVEDIB,0,Longint(Pchar(path)));
end;//////
ghCapWnd:=CapCreateCaptureWindowA(Pchar('QingHuntSoft'),
WS_CHILD or WS_VISIBLE,
0,
0,
VideoWind.Width,
VideoWind.Height,
VideoWind.Handle,
10);