DELPHI 2010以后的版本在摄像头开发方面

lazarus_net 2015-04-16 08:10:43
在DELPHI7里面保存从摄像头捕捉的图片,设置路径后,图片存放的位置是正确的
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
在2010、XE7和XE8里面都是只读了路径的第一个字符。比如我设置将图片保存到C盘的A文件夹里面,但是执行代码后图片却保存到EXE一起的目录里,而且图片名为C
同样的代码,不一样的效果
而且这张图片的是无格式的,如.jpg,用图片查看器能打开
...全文
1752 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lai_ke 2018-05-30
  • 打赏
  • 举报
回复
VAR LUJING:ansistring ; begin if hWndC <> 0 then begin LUJING:='2.BMP'; //SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(string(LUJING))); SendMessage(hWndC,WM_CAP_SAVEDIB,0,LongInt(LUJING)); BmpToJpg('2.BMP'); // CopyFile('e','e:\2.bmp',False); end;
xuelun2003 2015-04-27
  • 打赏
  • 举报
回复
var LUJING:ansistring
lazarus_net 2015-04-19
  • 打赏
  • 举报
回复
我自己屌丝了一回,在XE版本里加了句代码CopyFile('C','C:\我是复制的图片.jpg',False);,于是,间接实现了正确路径和名称 procedure TForm1.BitBtn2Click(Sender: TObject); var LUJING : PChar; begin if hWndC <> 0 then begin LUJING:='C:\2.BMP'; //SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(string(LUJING))); SendMessage(hWndC,WM_CAP_SAVEDIB,0,LongInt(LUJING)); CopyFile('C','C:\我是复制的图片.jpg',False); end;
lazarus_net 2015-04-19
  • 打赏
  • 举报
回复
当然这里先不结贴,有大神能解决此法,望不吝赐教
lazarus_net 2015-04-19
  • 打赏
  • 举报
回复
引用 8 楼 dengzhen 的回复:
你试试这样: procedure TForm1.Button1Click(Sender: TObject); var LUJING : String; begin LUJING:='C:\1.BMP'; SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar(LUJING))); end;
您好,这个string最早就试过了,今早继续测试,XE系列版本下无效,依旧SendMessage第四个参数默认只读第一个字符。 看来是开发工具里的问题了 这样,突然有个思路 既然XE系列版本有这个BUG,那就用DELPHI7自己封装个控件拿来让XE用就行了
dengzhen 2015-04-19
  • 打赏
  • 举报
回复
你试试这样: procedure TForm1.Button1Click(Sender: TObject); var LUJING : String; begin LUJING:='C:\1.BMP'; SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar(LUJING))); end;
lazarus_net 2015-04-18
  • 打赏
  • 举报
回复
现在只能说是在XE8里面设计和写代码,然后dpr用7打开,然后编译
lazarus_net 2015-04-18
  • 打赏
  • 举报
回复
引用 4 楼 pilicat 的回复:
你的这段代码有问题吧,PChar的内存没有提前分配:

procedure TForm1.Button1Click(Sender: TObject);
var
LUJING : PChar;
begin
LUJING:='C:\1.BMP';
SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar(LUJING)));
end;

应该调整为:
procedure TForm1.Button1Click(Sender: TObject);
var
LUJING : PChar;
begin
GetMem(LUJING, 1024);
LUJING:='C:\1.BMP';
SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar(LUJING)));
end;


按照您的代码,GetMem(LUJING, 1024);FreeMem(LUJING);,DELPHI XE系列版本下生成图片的图片名依旧是C、D盘的盘符名
只有DELPHI7和lazarus下才正常保存到准确的路径,准确的图片名……
lyhoo163 2015-04-18
  • 打赏
  • 举报
回复
如果开发视频、图像功能的话,建议使用DSPack。
pilicat 2015-04-18
  • 打赏
  • 举报
回复
对了,函数调用完毕后还需释放分配的内存块: FreeMem(LUJING);
pilicat 2015-04-18
  • 打赏
  • 举报
回复
你的这段代码有问题吧,PChar的内存没有提前分配: procedure TForm1.Button1Click(Sender: TObject); var LUJING : PChar; begin LUJING:='C:\1.BMP'; SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar(LUJING))); end; 应该调整为: procedure TForm1.Button1Click(Sender: TObject); var LUJING : PChar; begin GetMem(LUJING, 1024); LUJING:='C:\1.BMP'; SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar(LUJING))); end;
SVIP_ 2015-04-17
  • 打赏
  • 举报
回复
cnpack里面的cnvcl里面有封装好的对摄像头的操作 你参考下
lazarus_net 2015-04-16
  • 打赏
  • 举报
回复
在DELPHI7里面保存从摄像头捕捉的图片,设置路径后,图片存放的位置是正确的 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 在2010、XE7和XE8里面都是只读了路径的第一个字符。比如我设置将图片保存到C盘的A文件夹里面,但是执行代码后图片却保存到EXE一起的目录里,而且图片名为C 同样的代码,不一样的效果 而且这张图片的是无格式的,如.jpg,用图片查看器能打开 procedure TForm1.Button1Click(Sender: TObject); var LUJING : PChar; begin LUJING:='C:\1.BMP'; SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar(LUJING))); end;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧