FILE* fp;
fp = fopen("Pic.jpg", "wb");
fwrite(DstBuffer, ValidByteSize, 1, fp);//DstBuffer是图像数据内存地址,ValidByteSize是图像字节数大小
fclose(fp);
完整测试程序,但图像数据采集、格式转换都是用的相机厂商提供的SDK接口,并不通用
#include<DVPCamera.h>
#include <conio.h>//_kbhit
#include <fstream>
#include <iostream>
using namespace std;//cout
#ifdef _M_X64// 加载 64 位 LIB 库
#pragma comment(lib, "DVPCamera64.lib")
#else // 加载 32 位 LIB 库
#pragma comment(lib, "DVPCamera.lib")
#endif
dvpStatus status_t;//相机状态
dvpHandle CameraHandle_t;//相机句柄
dvpFrame Frame_t;//帧信息
void* Buffer_t;//帧地址
//定义事件回调
dvpInt32 dvpEventCallback_t(dvpHandle handle, dvpEvent event, void* pContext, dvpInt32 param, struct dvpVariant* pVariant)
{
printf("事件回调执行\n");
return 0;
}
int main()
{
dvpUint32 n = 0;
dvpRefresh(&n);//刷新相机并获取已连接的相机数量
dvpOpen(0, dvpOpenMode(OPEN_NORMAL), &CameraHandle_t);//打开相机
status_t=dvpSetSourceFormat(CameraHandle_t, S_RAW12);
status_t=dvpSetTargetFormat(CameraHandle_t, S_RAW16);
//注册事件回调
dvpRegisterEventCallback(CameraHandle_t, dvpEventCallback_t, EVENT_FRAME_END, NULL);
dvpStart(CameraHandle_t);//启动视频流
while (1)
{
n = _getch();//不阻塞版input
printf("%d", n);
if (n == 13)//Enter键
{
//status_t = dvpSavePicture(&Frame_t, Buffer_t, "DvpSave.jpg", 100);
void* DstBuffer = new unsigned char[Frame_t.iWidth * Frame_t.iHeight];//[out]输出到用户指针图像的数据
dvpUint32 ByteSize = Frame_t.iWidth * Frame_t.iHeight;//[in]指导用户图像缓存的字节数
dvpUint32 ValidByteSize=0;//[out]输出到用户图像缓存的实际有效字节数
dvpStr strFormat = "jpg";
status_t = dvpPrintPictureToBuffer(&Frame_t,Buffer_t, strFormat,100, DstBuffer, Frame_t.uBytes, &ValidByteSize);
/*
将相机原始帧图像数据格式转换为其他格式(目前支持的数据格式包括:FORMAT_MONO、FORMAT_BAYER_BG、FORMAT_BGR24)
[in] pFrame 帧信息
[in] pBuffer 图像数据的内存首地址
[in] hWnd 用于显示图像的窗口句柄
[in] sRect 用于显示的图像区域,空指针代表整个图像区域
[in] dRect 用于显示的窗口区域,空指针代表整个窗口区域
*建议在dvpStreamCallback 视频流回调函数中使用此功能
*/
FILE* fp;
fp = fopen("Pic.jpg", "wb");
fwrite(DstBuffer, ValidByteSize, 1, fp);//转换格式后直接写入为本地图像文件
fclose(fp);
continue;
}
if (n == 103)//G
{
dvpGetFrame(CameraHandle_t, &Frame_t, &Buffer_t, 3000);//获取一帧图像
}
if (n==116)//T
{
dvpTriggerFire(CameraHandle_t);
}
if (n == 27)//ESC键
{
break;
}
}
dvpStop(CameraHandle_t);//停止视频流
dvpClose(CameraHandle_t);//关闭相机
return 0;
}