在我的应用程序中,我正在捕获图像,然后按一下按钮即可应用一些过滤器(功能)。 解决:
所以问题是当我将位图转换为byteArray时,我将获得RGBA 字节格式,因此对RED的访问是第4个字节的每个第一个位置。 多数民众赞成在简单,但我不明白的是:为什么黑是0不是-128 白色是-1而不是127 // 4个字节:R G B A // 4个字节:0 1 2 3 // byte => -128至127 //黑色->灰色->灰色->白色 // 0-> 127-> -128-> -1
所以有什么想法如何获取从0到255或-128到127的数字?相当于从黑到白的过渡。
通过添加value = value和0xFF来解决
this.actualPosition = 1; //Green
for(int j=0; j < bmpHeight ; j++) {
for(int i=0 ; i < bmpBytesPerPixel/4 ;i++) {
byte midColor = (byte) ( (byteArray[actualPosition-1]& 0xFF) * 0.30 + (byteArray[actualPosition]& 0xFF) * 0.59 + (byteArray[actualPosition+1]& 0xFF) * 0.11 );
byteArray[actualPosition]=midColor;
byteArray[actualPosition+1]=midColor;
byteArray[actualPosition+-1]=midColor;
//byteArray[actualPosition+1]=byteArray[actualPosition];
//byteArray[actualPosition+-1]=byteArray[actualPosition];
actualPosition += 4;
}
}
尝试制定最快的算法。使用高清图像/位图时,此时间约为〜2.7s,因此字节数组的长度为4 * 1080 * 720 = 3110400字节。进入3/4。
相反,这是我将位图转换为byteArray的方式。
private void getArrayFromBitmap() {
// Převod Bitmap -> biteArray
int size = this.bmpBytesPerPixel * this.bmpHeight;
ByteBuffer byteBuffer = ByteBuffer.allocate(size);
this.bmp.copyPixelsToBuffer(byteBuffer);
this.byteArray = byteBuffer.array();
}
private void getBitmapFromArray() {
// Převod biteArray -> bitmap
Bitmap.Config configBmp = Bitmap.Config.valueOf(this.bmp.getConfig().name());
this.bmp = Bitmap.createBitmap(this.bmpWidth, this.bmpHeight, configBmp);
ByteBuffer buffer = ByteBuffer.wrap(this.byteArray);
this.bmp.copyPixelsFromBuffer(buffer);
System.out.println("\n DONE "+ configBmp);
}