如何在Android中提高效率?

时间:2015-06-11 14:14:57

标签: android

我有这段代码从CameraPreview获取TextureView的位图并将其呈现在ImageView上。

public void onSurfaceTextureUpdated(SurfaceTexture surface) {
    // Invoked every time there's a new Camera preview frame

    bmp = mTextureView.getBitmap();
    bmp2 = bmp.copy(bmp.getConfig(),true);

    for(int x=0;x<bmp.getWidth();x++){
        for(int y=0;y<bmp.getHeight();y++){
            //Log.i("Pixel RGB (Int)", Integer.toString(bmp.getPixel(x,y)));
            if(bmp.getPixel(x,y) < -8388608){
                bmp2.setPixel(x,y,Color.WHITE);
            }else{
                bmp2.setPixel(x,y,Color.BLACK);
            }
        }
    }

    mImageView.setImageBitmap(bmp2);
}

所以基本上我将在相机显示的任何地方应用实时图像处理。现在它只是背面和白色像素。它现在有点慢,而且位图的宽度和高度只有~250像素。

这是推荐的做法吗?

1 个答案:

答案 0 :(得分:5)

要有效过滤位图,您可以使用ColorMatrixColorFilter。例如,使您的图像变黑&amp;白色使用此代码:

ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.setSaturation(0);

float m = 255f;
float t = -255*1.2f;
ColorMatrix threshold = new ColorMatrix(new float[] {
            m, 0, 0, 1, t,
            0, m, 0, 1, t,
            0, 0, m, 1, t,
            0, 0, 0, 1, 0
});

// Convert to grayscale, then scale and clamp
colorMatrix.postConcat(threshold);

ColorMatrixColorFilter filter = new ColorMatrixColorFilter(colorMatrix);
imageView.setColorFilter(filter);

基本上你必须改变颜色范围,所以等于(颜色)和(颜色+ 1)的值是(0)和(1)。这就是我将颜色乘以255并进行移位的原因。您可能希望使用这些参数来获得正确的结果。

点击此处的幻灯片:http://chiuki.github.io/android-shaders-filters/#/16