StretchDIBits拉伸图像以及GetDIBits获取图像数据
我想把一副图像拉伸成另一尺寸, 并获得拉伸后的图像数据,我是这么做的,
////////////////////////////////////////////////////////////////////////////////////////////////////
// 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.
不知道是什么地方的问题,
或者有其他方法能达到我的目的,
请各位大侠相助.