首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

用GetPixel和SetPixel获取和设置图片的颜色值太慢了,大家有什么好的方法没,该怎么处理

2012-01-12 
用GetPixel和SetPixel获取和设置图片的颜色值太慢了,大家有什么好的方法没......[解决办法]GetDIBitsSetDI

用GetPixel和SetPixel获取和设置图片的颜色值太慢了,大家有什么好的方法没
......

[解决办法]
GetDIBits 
SetDIBits
[解决办法]
给段代码给你自己看吧:

//抠像(将SCR.bmp中蓝色去除)
CFile file;
if(!file.Open("E:\\scr.bmp" , CFile::modeRead , NULL)) return;
BITMAPFILEHEADER bfh;
DWORD dwDataSize = file.GetLength() - sizeof(BITMAPFILEHEADER);
LPBITMAPINFO lpbi = (LPBITMAPINFO)malloc(file.GetLength());

file.Read(&bfh , sizeof(BITMAPFILEHEADER));
file.Read(lpbi , file.GetLength() - sizeof(BITMAPFILEHEADER));

file.Close();

LPBITMAPINFOHEADER lpbih = (LPBITMAPINFOHEADER)lpbi;
LPBYTE lpBits = (LPBYTE)lpbi + sizeof(BITMAPINFOHEADER);

int i,j;
unsigned char *temp;
for(i=0;i<lpbih->biHeight;i++)
{
for(j=0;j<lpbih->biWidth;j++)
{
temp=lpBits;
if((*temp>20)&&(*(temp++)>20)&&(*(temp++)<90))
{*lpBits =255;
lpBits ++;
*lpBits = 255;
lpBits ++;
*lpBits = 255;
lpBits ++;
}

else

lpBits +=3;
}
}

if(file.Open("E:\\des.bmp" , CFile::modeCreate | CFile::modeWrite) )
{
file.Write(&bfh,sizeof(BITMAPFILEHEADER));
file.Write(lpbi , dwDataSize);
file.Close();
}
free(lpbi);
lpbi = NULL;
[解决办法]
用DIB,解析BMP的数据结构,并修改
[解决办法]
如楼上,解析数据应该是最快的了
[解决办法]
1楼的都已经说了,GetDIBits获取到图象数据,对图象数据直接进行操作,操作完毕后SetDIBits进行更新。
[解决办法]
开个线程。。。。还可以给用户慢动作显示的效果:)

热点排行