Java 当我将rgb位图转换为yuv时,它会生成一个红色图像。我想从图库中读取YUV格式的图像或将RGB位图转换为YUV

Java 当我将rgb位图转换为yuv时,它会生成一个红色图像。我想从图库中读取YUV格式的图像或将RGB位图转换为YUV,java,android,image,bitmap,yuv,Java,Android,Image,Bitmap,Yuv,我想使用图像的Y、U和V通道。我如何瞄准这些频道?需要转换的帮助。请给我一些示例代码。 这是我的密码 public void YUVImage(View view) { Bitmap bitmap = ((BitmapDrawable)OrignalImg.getDrawable()).getBitmap();//reading image from imageView int bwidth = bitmap.getWidth(); int bheight = bitm

我想使用图像的Y、U和V通道。我如何瞄准这些频道?需要转换的帮助。请给我一些示例代码。 这是我的密码

public void YUVImage(View view) {
    Bitmap bitmap = ((BitmapDrawable)OrignalImg.getDrawable()).getBitmap();//reading image from imageView

    int bwidth = bitmap.getWidth();
    int bheight = bitmap.getHeight();
    Bitmap mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
    Canvas c = new Canvas(mutableBitmap);

    Toast.makeText(this, "Done 1 ok ",
            Toast.LENGTH_LONG).show();  

    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setFilterBitmap(true);

    Toast.makeText(this, "Done 2 ok ",
          Toast.LENGTH_LONG).show();    

    ColorMatrix yuvMatrix = new ColorMatrix();
    yuvMatrix.setRGB2YUV();

    Toast.makeText(this, "Now Yuv ok ",
          Toast.LENGTH_LONG).show();

    ColorFilter filter = new ColorMatrixColorFilter(yuvMatrix);
    paint.setColorFilter(filter);
    Matrix matrix = new Matrix();
    matrix.setTranslate(2*bwidth, 2*bheight); 
    c.drawBitmap(mutableBitmap, 0, 0, paint);

    Toast.makeText(this, "Canvas ok ",
          Toast.LENGTH_LONG).show();    

    ImageView mImg=null;
    mImg = (ImageView) findViewById(R.id.imageView1);
    mImg.setImageDrawable(new BitmapDrawable(getResources(), mutableBitmap));
    //mImg.setImageBitmap(newBitmap);

     Toast.makeText(this, "YUV Image converted",
             Toast.LENGTH_LONG).show(); 

  }

如果你只是想要这些值,那么简单的数学就是你所需要的

void rgb2yuv(int r, int g, int b) {
    int y = (int)(0.299 * r + 0.587 * g + 0.114 * b);
    int u = (int)((b - y) * 0.492f); 
    int v = (int)((r - y) * 0.877f);
}

只需将0替换为您的图像大小

c、 drawBitmap(可变位图、x、y、绘制)


这对我很有帮助。

可能重复:谢谢你,安德鲁,我已经读了这篇文章,但没有相关内容。我也使用了encodeYV12和getYV12方法,但是我的应用程序崩溃了,消息数组索引越界异常@AndrewHi@Andrew这些值能帮助我创建与原始图像相同的图像位图吗。???你是对的,我可以用你的方法得到这些值,但我只会用这些值做什么呢。我想要一个YUV格式的图像位图。这样我就可以继续我的申请了。我已经搜索了很多次,尝试了不同的方法,但正如你所看到的,我仍然被卡住了。你尝试过搜索“位图到YUV”吗?只要您知道如何将字节数组转换为位图,这个问题的答案几乎就是您所需要的。