0

我有从 sdcard 加载图像并将其发布到 ImageView 的代码。

Mat mRgba = Highgui.imread(dir);
Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(),Bitmap.Config.ARGB_8888);
Utils.matToBitmap(mRgba, bmp);
mImage.setImageBitmap(bmp, true, null, 5.0f);

图像已加载,但颜色错误。颜色似乎是倒置的(但不是倒置的)。这是图像比较

我试图通过

Bitmap bmp = BitmapFactory.decodeFile(dir);

它工作正常。但我必须使用Highgui.imread.

我的代码有什么问题?

4

3 回答 3

3

你将不得不使用这样的东西:

    Mat inputImage = Highgui.imread(pathToFile);
    Mat tmp = new Mat();

    Imgproc.cvtColor(inputImage, tmp, Imgproc.COLOR_BGR2RGB);

    Bitmap imageToShow = Bitmap.createBitmap(tmp.cols(), tmp.rows(), Bitmap.Config.ARGB_8888);
    Utils.matToBitmap(tmp, imageToShow);
于 2013-05-05T15:35:29.617 回答
0

另请注意,ARGB 不是 RGBA。您可能需要重新排列每个像素的字节。就像是

int pixel = get_the_pixel();
int alpha = 0xff & pixel;
pixel = pixel<<8 | alpha;
set_the_pixel(pixel);

你会想要做一些比这里显示的访问器方法更有效的事情,但你明白了。

于 2012-12-05T17:10:00.030 回答
0

您正在尝试加载位图,假设图像是 8 位/彩色 RGBA:您确定吗?

于 2012-12-05T16:59:25.390 回答