StretchDIBits能正常显示图片,保存为BMP图片花屏.
#define PIXEL_NUM 24
#define PIXEL_COUNT 8
保存BMP代码:
void SaveImage(BYTE *buff, int tWidth, int tHeight, CString OutPath)
{
FILE *fp;
fp = fopen(OutPath, "w");
if( !fp )
{
return;
}
else
{
int iBMPBytes = tWidth * tHeight * PIXEL_NUM / PIXEL_COUNT;
BITMAPINFO lpbmih;
lpbmih.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
lpbmih.bmiHeader.biWidth = tWidth;
lpbmih.bmiHeader.biHeight = tHeight;
lpbmih.bmiHeader.biPlanes = 1;
lpbmih.bmiHeader.biBitCount = PIXEL_NUM;
lpbmih.bmiHeader.biCompression = BI_RGB;
lpbmih.bmiHeader.biSizeImage = iBMPBytes;
lpbmih.bmiHeader.biXPelsPerMeter = 0;
lpbmih.bmiHeader.biYPelsPerMeter = 0;
lpbmih.bmiHeader.biClrUsed = 0;
lpbmih.bmiHeader.biClrImportant = 0;
BITMAPFILEHEADER bmfh;
ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
bmfh.bfType = 0x4d42;
bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmfh.bfSize = bmfh.bfOffBits + (tWidth * tHeight) * PIXEL_NUM / PIXEL_COUNT;
fwrite(&bmfh, 1, sizeof(BITMAPFILEHEADER), fp);
fwrite(&(lpbmih.bmiHeader),1, sizeof(BITMAPINFOHEADER), fp);
fwrite(buff, 1, iBMPBytes, fp);
fclose(fp);
}
}
显示代码:
void Capture(BYTE *buff, int tWidth, int tHeight)
{
BITMAPINFO lpbmih;
lpbmih.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
lpbmih.bmiHeader.biWidth = tWidth;
lpbmih.bmiHeader.biHeight = tHeight;
lpbmih.bmiHeader.biPlanes = 1;
lpbmih.bmiHeader.biBitCount = PIXEL_NUM;
lpbmih.bmiHeader.biCompression = BI_RGB;
lpbmih.bmiHeader.biSizeImage = 0;
lpbmih.bmiHeader.biXPelsPerMeter = 0;
lpbmih.bmiHeader.biYPelsPerMeter = 0;
lpbmih.bmiHeader.biClrUsed = 0;
lpbmih.bmiHeader.biClrImportant = 0;
RECT rc;
m_StaticDisplay.GetClientRect(&rc);
CDC* srcDc = m_StaticDisplay.GetDC();
SetStretchBltMode(srcDc->m_hDC,COLORONCOLOR);
StretchDIBits(
srcDc->m_hDC,rc.left,rc.top,rc.right,rc.bottom,0,0,tWidth,tHeight,buff,&lpbmih,DIB_RGB_COLORS,SRCCOPY);
ReleaseDC(srcDc);
}
两段BUFFER是一模一样的.
...全文
相关推荐
StretchDIBits函数显示RGB数据流图像
标题中的“StretchDIBits函数显示RGB数据流图像”指的是在Windows API中,利用StretchDIBits函数将包含RGB像素数据的位图进行拉伸或缩放,并在设备上下文中显示的方法。
工业相机SDK二次开发实战:从Demo到产品级视觉采集系统
在机器视觉与工业自动化领域,软件开发工具包(SDK)是连接硬件设备与应用软件的关键桥梁。其核心原理在于通过封装底层通信协议与硬件操作指令,为开发者提供标准化的编程接口,从而降低集成复杂度。这项技术的核心价值在于实现工业相机等专业设备的高效控制与图像数据稳定获取,广泛应用于智能制造、质量检测、机器人引导等场景。本文聚焦于工业相机SDK的二次开发实践,深入解析如何基于厂商提供的Visual C++示例程序(Demo),构建稳健的视频采集系统。文章将详细拆解环境配置、SDK集成、设备枚举、参数配置、图像回调与显示
vc 显示bmp图片
**显示BMP图片** MFC中的`CStatic`控件可以用来显示静态内容,包括图片。我们可以通过重载`CStatic`控件并实现`OnPaint`消息处理函数来显示BMP图像。
基于对话框的BMP图片读取以及显示
**显示图片**:创建一个CDC对象,获取静态控件的设备上下文,然后使用CBitmap的DrawIndirect()方法或 StretchDIBits()函数将BMP图像绘制到静态控件上。6.
MFC打开和保存一幅bmp图片---编程流程图.doc
在MFC(Microsoft Foundation Classes)框架中,打开和保存BMP(Bitmap)图片涉及一系列步骤。以下是编程流程的详细说明:1.


