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

Posted

技术标签:

【中文标题】当我将我的 rgb 位图转换为 yuv 时,它会产生红色图像。我想以 YUV 格式从图库中读取图像或将 RGB 位图转换为 YUV【英文标题】:when I convert my rgb bitmap to yuv it results in a red image. I want to read image from gallery in YUV format or convert the RGB bitmap to YUV 【发布时间】:2015-07-25 02:15:34 【问题描述】:

我想使用图像的 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(); 

  

【问题讨论】:

可能重复:***.com/questions/9325861/… 谢谢安德鲁,我已经阅读了该主题,但这不相关。我也使用了方法 encodeYV12 和 getYV12 link 但我的应用程序崩溃,消息数组索引超出范围异常@Andrew 【参考方案1】:

如果您只需要这些值,那么您只需要简单的数学运算即可。

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);

【讨论】:

嗨@Andrew 这些值可以帮助我创建与原始图像相同的图像位图吗????你是对的,我可以通过使用你的方法来获得价值观,但我只会用这些价值观来做什么。我想要一个具有 YUV 格式的图像位图。这样我就可以继续我的申请。我搜索了很多,尝试了不同的方法,但正如你所见,我仍然卡住了。 您是否尝试搜索“bitmap to YUV”?只要您知道如何将字节数组转换为位图,这个问题的答案几乎就是您所需要的。 ***.com/a/13055615/902730【参考方案2】:

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

c.drawBitmap(mutableBitmap, x, y, paint);

它帮助了我。

【讨论】:

以上是关于当我将我的 rgb 位图转换为 yuv 时,它会产生红色图像。我想以 YUV 格式从图库中读取图像或将 RGB 位图转换为 YUV的主要内容,如果未能解决你的问题,请参考以下文章

将 RGB 转换为 YUV,+ ffmpeg

YUV 转 RGB 和 CreateBitmap ......格式是啥?

在Android camera2下将YUV_420_888转换为位图的图像不正确

YUV NV21 转换为 RGB 的困惑

如何将rgb 模式转换成 yuv 模式

sws_scale YUV --> RGB 扭曲图像