具体代码如下
FILE* fpIn;
fpIn = fopen("D:\\yangben.bmp", "rb");
if (fpIn == NULL)
{
MessageBox("文件打不开!");
}
else
{
fseek(fpIn, 0L, SEEK_END);
int len = ftell(fpIn);
BYTE* img = new BYTE[len];
fread(img, sizeof(BYTE), len, fpIn);
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, len);
BYTE* pData = (BYTE*)GlobalLock(hGlobal);
memcpy(pData, img, len); // 拷贝位图数据进去
GlobalUnlock(hGlobal);
IStream* pStream = NULL;
CreateStreamOnHGlobal(hGlobal, TRUE, &pStream);
if (pStream == NULL)
{
MessageBox("321");
}
else
{
pDC = GetDC();
Graphics graphics(pDC->m_hDC);
Image* pImg= Image::FromStream(pStream);
graphics.DrawImage(pImg, 0, 0, rect.Width(), rect.Height());
ReleaseDC(pDC);
}
GlobalFree(hGlobal);
pStream->Release();
fclose(fpIn);
}
结果数据流读取不到,在Image::FromStream(pStream)上说无效的参数,我查看过pStream的大小是没问题的,我研究了很久,可能是FromStream要识别BMP等格式的数据,但是我把这个图片BMP文件全部读取出来做成pStream也没法用,请问怎么解决。当然我可以直接用LOAD读取这个图片文件,但这么做主要是为了将从相机获取的图像数组显示出来,所以从读取一个BMP文件里的信息来练习。
fseek(fpIn, 0L, SEEK_END);
int len = ftell(fpIn);
fseek(fpIn, 0L, SEEK_SET); // <---- 把文件指针移动到头上,否则fread读不到任何数据
BYTE* img = new BYTE[len];
fread(img, sizeof(BYTE), len, fpIn); // <-- 用个变量接一下返回值,看读到了多少数据