位图到byteArray,像素逻辑(如何加快算法)

时间:2018-12-30 17:57:08

标签: java arrays image bitmap byte

在我的应用程序中,我正在捕获图像,然后按一下按钮即可应用一些过滤器(功能)。 解决:

  

所以问题是当我将位图转换为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);
    }

0 个答案:

没有答案