通过灰度缩小图像尺寸

时间:2019-02-19 12:28:50

标签: java android

所有。

有这样的代码:

public void onPreviewFrame(byte[] data,Camera camera){
    try{
        YuvImage yuvimage=new YuvImage(data,ImageFormat.NV21,this.width,this.height,null);
        System.out.println("WidthandHeight"+yuvimage.getHeight()+"::"+yuvimage.getWidth());
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        yuvimage.compressToJpeg(new Rect(0,0,this.width,this.height),100,baos);
    }catch(Exception e){
        Log.d("parse","errpr");
    }
}

它从相机获取图像并将其转换为jpg图像。

但这是问题所在:

即使图像质量缩小到20%,图像的重量也约为2 kb(2000字节)。

据我了解,图像的重量包括:

  

宽度*长度* 3(3-3个通道。R,G,B)。

实际上,如果将图像设为黑白,则公式将为:

  

宽度*长度* 1(一个通道)

也就是说,图像尺寸减小了3倍!

我试图这样做。

但检查后,结果发现图像变黑了,但大小照原样保留了大约2 kb。

代码(从RGB到灰度):     公共位图到灰度(位图bmp原始)     {         int宽度,高度;         高度= bmpOriginal.getHeight();         宽度= bmpOriginal.getWidth();

    Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(bmpGrayscale);
    Paint paint = new Paint();
    ColorMatrix cm = new ColorMatrix();
    cm.setSaturation(0);
    ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
    paint.setColorFilter(f);
    c.drawBitmap(bmpOriginal, 0, 0, paint);
    return bmpGrayscale;
}

可能出什么问题了?这样可以减轻图像的重量吗?

0 个答案:

没有答案