最近在弄9650,转帖9650图像保存

HANDLE m_hcam;

m_hcam=CreateFile(".//HCD0",GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL); //获得摄像头的句柄

if(m_hcam==INVALID_HANDLE_VALUE){printf("can't open");}

//使能并初始化摄像头的控制码

DeviceIoControl(m_hcam, //设备句柄名                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

              IOCTL_CAM_CONT, //使能并初始化摄像头的控制码

              NULL, //输入数据

              0, //输入数据长度

              &chPrevEnable, //输出数据

              1, //输出数据长度

              &dwBytesReceive, //输出数据实际长度

              NULL); //重载操作结构指针

///获得一帧的数据

typedef struct PINGPONG_PR

{

unsigned int rgb_address; //RGB信息的内存地址

unsigned char flag;               //读标志位

} PINGPONG_PR;

PINGPONG_PR image; //定义结构体用于存RGB图像地址;

DeviceIoControl(m_hcam,

CAM_IOCTL_SAMSUNG_CAM_PR,//获得最近一帧RGB图像内存地址的操作码

NULL,

NULL,

(PBYTE)&image,

NULL,

NULL,

NULL);

//将内存地址中的数据保存

WORD width=GetSystemMetrics(SM_CXSCREEN);

WORD height=GetSystemMetrics(SM_CYSCREEN);//屏幕尺寸

BYTE* DDBdata=new BYTE[width*height*2];//分配用于存数据的空间

BYTE* DIBdata;

memcpy(DDBdata,(void *)image.rgb_address,width*height*2);//将这帧图像数据存入内存

//数据创建位图            不好意思啊,这里好象有错误,我弄的时候老是出错,该正中!

CBitmap bitmap;//位图

HBITMAP dstBmp;//位图句柄

bitmap.CreateBitmap(width,height,1,16,DDBdata);//用数据创建一张位图

HDC hdcSrc = CreateCompatibleDC(NULL);

HDC hdcDst = CreateCompatibleDC(NULL);//创建与应用程序的当前显示设备兼容的内存DC返回其句柄

BITMAPINFOHEADER   bih={0};//位图信息头,记录BMP本身信息,与图像数据无关

bih.biBitCount = 16;//每个像素字节大小

bih.biCompression= BI_RGB;//未压缩格式

bih.biHeight = height;//高度

bih.biPlanes= 1;

bih.biSize= sizeof(BITMAPINFOHEADER);

bih.biSizeImage = width*height*2;//图像数据大小

bih.biWidth = width;//宽度

BITMAPFILEHEADER   bfh   =   {0};//位图文件头

bfh.bfOffBits = sizeof(BITMAPFILEHEADER) +sizeof(BITMAPINFOHEADER);//到位图数据的偏移量

bfh.bfSize   =   bfh.bfOffBits + width*height*2;//文件总的大小

bfh.bfType   =   (WORD)0x4d42;//BM,位图标记

BITMAPINFO bi={0};位图信息结构,包含BITMAPINFOHEADER和图像数据

bi.bmiHeader=bih;

dstBmp=CreateDIBSection(hdcDst,

(BITMAPINFO*)&bi, //指定位图各种属性

DIB_RGB_COLORS,

(void **)&DIBdata,//接收指向DIB位数据值的指针

NULL,//系统为DIB分配内存

0);//创建应用程序可直接写入的DIB并返回位图句柄

SelectObject(hdcDst, dstBmp);

SelectObject(hdcSrc, bitmap);//选择一对象到指定DC环境中

//将位图复制到实际的设备环境中

BitBlt(hdcDst, //目标设备环境句柄

0, 0, //左上角坐标

width,

height,

hdcSrc, //源设备环境句柄

0, 0,

SRCCOPY);//直接拷贝

//将数据保存

CFile file("123.bmp",//文件名 这个地方好像也有问题,好像是_T("123.bmp"),

CFile::modeCreate|CFile::modeReadWrite);//可读可写

file.Write(&bfh,sizeof(bfh));//写入文件头

file.Write(&bih,sizeof(bih));//写入图像本身信息

file.Write(DIBdata,width*height*2);//写入图像数据

file.Close();//关闭文件

delete DDBdata;//回收内存

假设获得一帧数据的操作码所获得的是RGB数据地址,如果得到YcbCr数据,需转换成JPG

可以通过定时器获取帧,以到达录像作用,或调用驱动提供的录像控制码

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值