C++_JPG格式图像数据以二进制方式写入文件

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;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值