"); //-->
以前写的代码,最近发现自己在同一个界面显示多个图片的时候出现了问题,才回来重新看着个函数,其实原来自己根本不理解SetDIBitsToDevice的含义

这个函数里面xdest ydest决定显示的位置
dwwidth dwheigth xsrc ysrc决定图片显示的区域
原来自己的错误就是没理解xdest ydest dwwidth dwheigth的关系,才出错
/**********************************************
如果要显示图片的一块,lpDCRect和lpDIBRect的快高相等
计算方法
LONG DCWIDTH = lpDCRect->right - lpDCRect->left;
LONG DCHEIGTH = lpDCRect->bottom;
LONG DIBWIDTH = lpDIBRect->right - lpDIBRect->left;
LONG DIBHEIGTH = lpDIBRect->bottom - lpDIBRect->top;
xsrc ysrc决定开始的位置
//**********************************************
/*
hDC: 设备句柄
lpDCRect: left 和 top决定显示区域的起始点,bottom 和 right 决定显示的方式,如果
与lpDIBRect的宽高相等,那么使用SetDIBitsToDevice否则使用StretchDIBits
lpDIBRect:图片的显示区域,决定图片的显示区域
pbmpinfo: 图片的信息头
pbmpdata: 图片数据
*/
//************************************************
BOOL PrintDIB(HDC hDC,LPRECT lpDCRect,LPRECT lpDIBRect,BITMAPINFO *pbmpinfo,BYTE *pbmpdata)
{
BOOL bSuccess=TRUE;
if (lpDCRect->bottom == 0 || lpDCRect->right == 0)
{
return FALSE;
}
if (lpDIBRect->bottom == 0 || lpDIBRect->right == 0)
{
return FALSE;
}
LONG DCWIDTH = lpDCRect->right - lpDCRect->left;
LONG DCHEIGTH = lpDCRect->bottom;
LONG DIBWIDTH = lpDIBRect->right - lpDIBRect->left;
LONG DIBHEIGTH = lpDIBRect->bottom - lpDIBRect->top;
//如果不是24位色彩
HPALETTE temp_pPal;
HPALETTE HPal;
if (GetNumColors(pbmpinfo))
{
CPalette* pPal;
pPal=CreateBmpPalatte(pbmpinfo);
HPal=(HPALETTE)(pPal->m_hObject);
temp_pPal = ::SelectPalette(hDC,HPal,TRUE);
::RealizePalette(hDC);
}
// 设置显示模式
::SetStretchBltMode(hDC, COLORONCOLOR);
/* Determine whether to call StretchDIBits() or SetDIBitsToDevice() */
if (DCWIDTH == DIBWIDTH && DCHEIGTH == DIBHEIGTH)
{
bSuccess = ::SetDIBitsToDevice(
hDC, // hDC
lpDCRect->left, // DestX
lpDCRect->top, // DestY
DIBWIDTH, // nDestWidth
DIBHEIGTH, // nDestHeight
lpDIBRect->left, // SrcX
lpDIBRect->top, // Srcy
0, // nStartScan
lpDIBRect->bottom,
pbmpdata, // lpBits
pbmpinfo, // lpBitsInfo
DIB_RGB_COLORS // wUsage
);
}
// CRect DCRect1=CRect(0,0,320,256);
// CRect DCRect2=CRect(400,0,720,256);
// CRect DCRect3=CRect(0,300,320,256);
// CRect DCRect4=CRect(400,300,720,256);
else
{
bSuccess = ::StretchDIBits(
hDC, // hDC
lpDCRect->left, // DestX
lpDCRect->top, // DestY
DCWIDTH, // nDestWidth
DCHEIGTH, // nDestHeight
lpDIBRect->left, // SrcX
lpDIBRect->top, // SrcY
DIBWIDTH,
DIBHEIGTH,
pbmpdata, // lpBits
pbmpinfo, // lpBitsInfo
DIB_RGB_COLORS, // wUsage
SRCCOPY
);
}
::SelectPalette(hDC,temp_pPal,TRUE);
//delete temp_pPal;
return bSuccess;
}
/**********************************
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
2025年第三季度,全球开放式耳机(OWS)出货量突破1,000万台,华为领跑,TWS市场逐渐转向价值创造
2025 Christmas LED 圣诞耳环
无变压器乘积检波电路(MC1596G)
雨雪降落量遥测电路
举报!!!
基于MSP430单片机的虚拟I2C总线软件包VIIC_M1.0
CES 2010:XSTREAMHD 展位的演示视频
表面贴装X、Y型电容首次获得AEC-Q200认证
CES 2010:enTourage正式发布双屏电子书eDGe
CES 2010:外星人...Alienware M11X 推出
广大在校大学生的绝好消息!
Cincoze Din-Rail电脑(MD-3000)为机器视觉打造可靠的实时运算核心
基于MSP430F149单片机实现的步进电机通用控制器
广大在校大学生的绝好消息!
采用声光控制的电子路标
借助TOLL GaN突破太阳能系统的界限
CES 2010:海信周厚健在CES高峰论坛发表主题演讲
CES 2010:WiFi充电器 利用无线信号为手机充电
基于P87LPC764单片机的电压表
在北京买房(超搞笑啊)
调节简单的高输入阻抗双波线性检波电路(RC4558DN)
简易电缆速查仪(74HC4017)
基于P87LPC762 单片机的电子时间继电器
在北京买房(超搞笑啊)
视觉-语言-行动模型为自动驾驶开辟了四级前沿
中国汽车月度产量首次超过350万辆,车市消费热度持续上升
DIY 3D-打印 String Shooter —— 深度技术解析与电机/摩擦/电路的工程原理
Snapdragon Ride Flex加速舱驾融合落地,多款新车型集中发布
现代电源设计工具
基于P87LPC764单片机的ADC应用设计方法初探