大虾帮我看看这段转灰度的代码
其中Totalsize=bminfo.bmWidth*bminfo.bmHeight*3; //我处理的是真彩色
bmpinfo的声明为BYTE *bmpinfo;
用setbitmapbits和getbitmapbits是不是有问题?
void CTest5Doc::OnProcessRgbtogray()
{
Bitmap.GetBitmapBits(Totalsize,bmpinfo);
int i,j,R,G,B;
for(j=0;j <bminfo.bmHeight;j++)
for(i=0;i <bminfo.bmWidth;i++){
R=bmpinfo[j*bminfo.bmWidth*3+i*3+2];
G=bmpinfo[j*bminfo.bmWidth*3+i*3+1];
B=bmpinfo[j*bminfo.bmWidth*3+i*3];
bmpinfo[j*bminfo.bmWidth*3+i*3+2]=(299*R+587*G+114*B)/1000;
bmpinfo[j*bminfo.bmWidth*3+i*3+1]=(299*R+587*G+114*B)/1000;
bmpinfo[j*bminfo.bmWidth*3+i*3]=(299*R+587*G+114*B)/1000;
}
Bitmap.SetBitmapBits(Totalsize,bmpinfo);
UpdateAllViews(NULL);
// TODO: Add your command handler code here
}
运行转换后一幅图片的下半部分变黑了,而且上面有显示的部分也没有变为黑白。
如果需要全部代码,请加我qq:101084014或者告诉我你的邮箱,谢谢帮忙!
[解决办法]
图像转成灰度后像素所占字节时候变为原来的1/3 ?Totalsize=bminfo.bmWidth*bminfo.bmHeight;
[解决办法]
为什么乘4呢?就是×3呀。
难道你用的原图是32位的?
[解决办法]
哦,接分
你原来是用32位的啊,怪不得了
24位就要*3