为什么小弟我的程序的这段StretchDIBits总是返回的是0?
为什么我的程序的这段StretchDIBits总是返回的是0???
void printpic::OnPaint()
{
CClientDC dc(this); // device context for painting
BITMAPFILEHEADER bmfHeader;//
BITMAPINFOHEADER bmhdinfo;//
BITMAPINFO bitmapinfo;
FILE * readstream;
if((readstream=fopen(lpszPathName, "rb "))==NULL){
return;
}
if (fread(&bmfHeader,sizeof(BITMAPFILEHEADER),1,readstream)!=1) {
return;
}
if (fread(&bmhdinfo,sizeof(BITMAPINFOHEADER),1,readstream)!=1) {
return;
}
bitmapinfo.bmiHeader=bmhdinfo;
char * p= (char*)malloc(bmhdinfo.biSizeImage);
if(fread(p,1,bmhdinfo.biSizeImage,readstream)!=bmhdinfo.biSizeImage)
{
return;
}
int ii=StretchDIBits(dc.GetSafeHdc(),0,0,bmhdinfo.biWidth,bmhdinfo.biHeight,0,0,
bmhdinfo.biWidth,bmhdinfo.biHeight,p,&bitmapinfo,DIB_RGB_COLORS,SRCCOPY);
free(p);
------解决方案--------------------
bitmapinfo 若不是24rgb缺少调色板信息
bmhdinfo.biSizeImage 不能保证!=0
StretchDIBits 看帮助是王道
void printpic::OnPaint()
{
CClientDC dc(this); // device context for painting
BITMAPFILEHEADER bmfHeader;//
BITMAPINFOHEADER bmhdinfo;//
BITMAPINFO bitmapinfo;
FILE * readstream;
if((readstream=fopen(lpszPathName, "rb "))==NULL){
return;
}
if (fread(&bmfHeader,sizeof(BITMAPFILEHEADER),1,readstream)!=1) {
return;
}
if (fread(&bmhdinfo,sizeof(BITMAPINFOHEADER),1,readstream)!=1) {
return;
}
bitmapinfo.bmiHeader=bmhdinfo;
char * p= (char*)malloc(bmhdinfo.biSizeImage);
if(fread(p,1,bmhdinfo.biSizeImage,readstream)!=bmhdinfo.biSizeImage)
{
return;
}
int ii=StretchDIBits(dc.GetSafeHdc(),0,0,bmhdinfo.biWidth,bmhdinfo.biHeight,0,0,
bmhdinfo.biWidth,bmhdinfo.biHeight,p,&bitmapinfo,DIB_RGB_COLORS,SRCCOPY);
free(p);
------解决方案--------------------
bitmapinfo 若不是24rgb缺少调色板信息
bmhdinfo.biSizeImage 不能保证!=0
StretchDIBits 看帮助是王道