StretchDIBits拉伸图像以及GetDIBits获取图像数据

xxdelta 2009-12-07 06:27:30
我想把一副图像拉伸成另一尺寸, 并获得拉伸后的图像数据,我是这么做的,


////////////////////////////////////////////////////////////////////////////////////////////////////

// w, h 图像原始尺寸
int outw, outh, ret;
outw = w/2;
outh = h/2;

HDC hStretchDC = CreateCompatibleDC(NULL); //
HBITMAP hStretchBMP = CreateCompatibleBitmap(hStretchDC, outw, outh); //

HGDIOBJ hOld = SelectObject(hStretchDC, hStretchBMP);

SetStretchBltMode(hStretchDC,COLORONCOLOR);

//拉伸图像到DC上
ret = StretchDIBits(hStretchDC,
0, 0, outw, outh,
0, 0, w, h, //w, h 图像原始尺寸
pImage, //原图
pBMPInfo, //原图信息
DIB_RGB_COLORS,SRCCOPY);

ULONG LineByte = (((outw * m_nColor / 8) + 3) / 4) * 4;
BITMAPINFO BMPInfo;
memset( &BMPInfo, 0, sizeof(BITMAPINFO) );
BMPInfo.bmiHeader.biSize = sizeof(tagBITMAPINFOHEADER);
BMPInfo.bmiHeader.biWidth = outw;
BMPInfo.bmiHeader.biHeight = outh;
BMPInfo.bmiHeader.biPlanes = 1;
BMPInfo.bmiHeader.biCompression = BI_RGB;
BMPInfo.bmiHeader.biBitCount = (USHORT)m_nColor;
BMPInfo.bmiHeader.biSizeImage = LineByte * BMPInfo.bmiHeader.biHeight;
BMPInfo.bmiHeader.biXPelsPerMeter = 0;
BMPInfo.bmiHeader.biYPelsPerMeter = 0;
BMPInfo.bmiHeader.biClrUsed = (m_nColor == 8) ? 0x100 : 0;
BMPInfo.bmiHeader.biClrImportant = BMPInfo.bmiHeader.biClrUsed;

//从DDB获取图像数据到pImage
ret = GetDIBits(
hStretchDC,
hStretchBMP,
0,
outh,
pImage,
&BMPInfo,
DIB_RGB_COLORS
);

//Save pImage to a image file ...

DeleteObject(hStretchBMP);
DeleteDC(hStretchDC);

//////////////////////////////////////////////////////////////////////////////////
StretchDIBits 和 GetDIBits 返回都成功,
但是从从GetDIBits获取到pImage的数据却全是0.
不知道是什么地方的问题,
或者有其他方法能达到我的目的,
请各位大侠相助.











...全文
310 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxdelta 2009-12-07
  • 打赏
  • 举报
回复
感谢楼上大侠,ok了,
能否解释其中的原委
warsour 2009-12-07
  • 打赏
  • 举报
回复
最后释放下
::SelectObject(hDC, hOld);
::ReleaseDC(GetDesktopWindow(), hDC);
warsour 2009-12-07
  • 打赏
  • 举报
回复
还有这个HBITMAP hStretchBMP = CreateCompatibleBitmap(hDC, outw, outh);
warsour 2009-12-07
  • 打赏
  • 举报
回复
加上这个试试
HDC hDC = ::GetDC(GetDesktopWindow());
HDC hStretchDC = ::CreateCompatibleDC(hDC);

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧