我正在尝试为android studio中的位图制作一个简单的像素计算器
需要一种快速获取像素并对其进行修改的方法,因此尝试了很多方法,例如:
1- getPixel()和setPixel()“非常慢”
2-锁定位和解锁位“需要未使用的Xamarin C#”
3个字节的缓冲区最终可以解决速度问题,并且对速度有所帮助,但仅适用于代码
R = G = B =(A或G或B)
但使用真实的公式
R = G = B =(0.299 * R + 0.587 * G + 0.114 * B)
结果不正确,为什么呢?
原始图片
下面代码后的图片
private void toGrayScale(Bitmap bmpData , Bitmap bmOut) {
int size = bmpData.getRowBytes()*bmpData.getHeight()*4;
int A,R,G,B;
ByteBuffer buf = ByteBuffer.allocate(size);
bmpData.copyPixelsToBuffer(buf);
byte[] byt = buf.array();
for(int ctr=0;ctr<size;ctr+=4)
{
//access array in form of argb. for ex. byt[0] is 'r', byt[1] is 'g' and so on..
R = (int) byt[ctr];
G = (int) byt[ctr + 1];
B = (int) byt[ctr + 2];
A = (int) byt[ctr + 3];
// retrieve color of all channels
byt[ctr] = byt[ctr + 1] = byt[ctr + 2] = (byte)(0.3 * R + 0.6 * G + 0.1 * B) ;
}
ByteBuffer retBuf = ByteBuffer.wrap(byt);
bmOut.copyPixelsFromBuffer(retBuf);
}
我希望结果是黑白图像,但像素变得模糊