gpt4 book ai didi

java - 为什么 RGBA 位图需要 3x3 数组来存储 1 个像素,如何避免这种情况?

转载 作者:行者123 更新时间:2023-12-02 11:34:38 24 4
gpt4 key购买 nike

我有一张由单一红色组成的 1x1 jpg 图像。

我通过以下方式从可绘制图像(Android)创建位图:

Bitmap bitmap_image = BitmapFactory.decodeResource(getResources(), R.drawable.onebyonered);

但是,在位图上调用 getWidth()getHeight() 会输出 3, 3。

然后我将位图转换为 OpenCV 矩阵:

Mat matrix = new Mat(1, 1, CvType.CV_64FC1);
// System.out.println(matrix);
Utils.bitmapToMat(bitmap_image, matrix);
// System.out.println(matrix);
System.out.println(matrix.dump());

第一个打印语句返回Mat [ 1*1*CV_64FC1, ...,第二个打印语句返回Mat [ 3*3*CV_8UC4, ...矩阵转储(转换为字符串)显示:

[255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255;
255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255;
255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255]

使用以下方法对其进行灰度化:

Imgproc.cvtColor(matrix, matrix, Imgproc.COLOR_RGBA2GRAY);

产生 3x3x1 而不是预期的 1x1x1:

[ 76,  76,  76;
76, 76, 76;
76, 76, 76]

鉴于上面提到的高度和宽度,并假设转储应该采用 RGBA 格式 - 为什么需要 9 个不同的值来表示 1 像素单色图像?我怎样才能把这个 3x3x1 变成我想要的 1x1x1 [76]?理想情况下,我使用的任何转换技术都应该是可逆的,或者我能够显示位图图像。

最佳答案

调用 getWidth()getHeight() 返回 3x3,因为系统根据设备密度缩放图像,因此返回错误的尺寸。将图像放入 assets 中并从那里加载或将其放入 drawable-nodpi 文件夹中。

关于java - 为什么 RGBA 位图需要 3x3 数组来存储 1 个像素,如何避免这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49040355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com