MFC|在Picture Control上显示一个RAW图

2023.2.22记录:图像显示不出来调用SetDIBitsToDevice函数返回值是0,原因是图片数据大小超过ui显示范围大小,故显示不出来,得缩放比例才能正常显示,暂未解决。

难死我了,搞了两天显示的可能还不对,但是记录一下,希望广大网友有更好的方法评论,诚心求教。
MFC本身没有提供直接显示RAW类型数据的接口,所以要先创建一个BITMAPINFO来进行显示。

	IMAGE_INFO imgInfo;	// 图像数据
	GetImageInfo(image, &imgInfo);	// 获取图像数据
	unsigned char *data = GetImageBuff(image);	// 真正的图像数据
	CDC* pDC = GetDlgItem(IDC_STATIC)->GetDC(); //获取图片控件DC
#pragma region 创建一个图像对象
		BITMAPINFO bitmapInfo;
		memset(&bitmapInfo, 0, sizeof(bitmapInfo));
		// 本结构的大小,根据不同的操作系统而不同,在Windows中,此字段的值总为28h字节=40字节
		bitmapInfo.bmiHeader.biSize = sizeof(bitmapInfo);	
		// BMP图像的宽度,单位像素
		bitmapInfo.bmiHeader.biWidth = static_cast<LONG>(imgInfo.width);
		// BMP图像的高度,单位像素
		bitmapInfo.bmiHeader.biHeight = static_cast<LONG>(imgInfo.height);
		// BMP图像的色深,即一个像素用多少位表示,常见有1、4、8、16、24和32,分别对应单色、16色、256色、16位高彩色、24位真彩色和32位增强型真彩色
		bitmapInfo.bmiHeader.biBitCount = 24;	// RGB 888 3个字节
		// 压缩方式,0表示不压缩,1表示RLE8压缩,2表示RLE4压缩,3表示每个像素值由指定的掩码决定
		bitmapInfo.bmiHeader.biCompression = BI_RGB;
		// 重要的颜色数,此值为0时所有颜色都重要,对于使用调色板的BMP图像来说,当显卡不能够显示所有颜色时,此值将辅助驱动程序显示颜色
		bitmapInfo.bmiHeader.biClrImportant = 0;
		// BMP图像使用的颜色,0表示使用全部颜色,对于256色位图来说,此值为100h=256
		bitmapInfo.bmiHeader.biClrUsed = 0;
		// BMP图像数据大小,必须是4的倍数,图像数据大小不是4的倍数时用0填充补足
		bitmapInfo.bmiHeader.biSizeImage = 0;
		// 水平分辨率,单位像素 / m
		bitmapInfo.bmiHeader.biXPelsPerMeter = 0;
		// 垂直分辨率,单位像素/m
		bitmapInfo.bmiHeader.biYPelsPerMeter = 0;
		// 目标设备的级别,必须是1
		bitmapInfo.bmiHeader.biPlanes = 1;
#pragma endregion 创建一个图像对象
		int nResult = ::SetDIBitsToDevice(
			pDC->m_hDC, // 绘画对象句柄
			0, // 起始绘画坐标x
			0, // 起始绘画坐标y
			bitmapInfo.bmiHeader.biWidth,	// 图片宽度
			bitmapInfo.bmiHeader.biHeight,	// 图片高度
			0,	// 图片起始坐标x
			0,  // 图片起始坐标y
			0,	// 线性画图 从0开始
			bitmapInfo.bmiHeader.biHeight,	// 画这么高的图
			data,	// 图片数据
			(BITMAPINFO*)&bitmapInfo,	// 数据头
			DIB_RGB_COLORS);
// 这个据说可以按比例自动缩放图片 但是我试了好像不行。。。
// 		int nResult = ::StretchDIBits(pDC->m_hDC, 0, 0, 900,
// 			800, 0, bitmapInfo.bmiHeader.biHeight, bitmapInfo.bmiHeader.biWidth,
// 			bitmapInfo.bmiHeader.biHeight, data, (BITMAPINFO*)&bitmapInfo, DIB_RGB_COLORS, SRCCOPY);
	ImageRelease(image);	// 释放图像数据
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇树谦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值