gpt4 book ai didi

android - 如何从原始图像获取位图

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:16:33 25 4
gpt4 key购买 nike

我正在从网络读取原始图像。此图像已由图像传感器读取,而不是从文件中读取。

这些是我对图像的了解:
~ 高度和宽度
~ 总大小(以字节为单位)
~ 8 位灰度
~ 1 字节/像素

我正在尝试将此图像转换为位图以显示在 ImageView 中。

这是我尝试过的:

BitmapFactory.Options opt = new BitmapFactory.Options();
opt.outHeight = shortHeight; //360
opt.outWidth = shortWidth;//248
imageBitmap = BitmapFactory.decodeByteArray(imageArray, 0, imageSize, opt);

decodeByteArray 返回 null,因为它无法解码我的图像。

我还尝试直接从输入流中读取它,而不是先将其转换为字节数组:

imageBitmap = BitmapFactory.decodeStream(imageInputStream, null, opt);

这也会返回 null

我在这个和其他论坛上搜索过,但找不到实现此目的的方法。

有什么想法吗?

编辑:我应该补充一点,我做的第一件事是检查流是否确实包含原始图像。我使用其他应用程序(iPhone/Windows MFC)做到了这一点,它们能够读取并正确显示图像。我只需要想出一种在 Java/Android 中执行此操作的方法。

最佳答案

Android 不支持灰度位图。所以首先,您必须将每个字节扩展为 32 位 ARGB int。 Alpha为0xff,R、G、B字节是源图像字节像素值的副本。然后在该数组的顶部创建位图。

此外(见评论),设备似乎认为 0 是白色,1 是黑色 - 我们必须反转源位。

因此,我们假设源图像位于名为 Src 的字节数组中。这是代码:

byte [] src; //Comes from somewhere...
byte [] bits = new byte[src.length*4]; //That's where the RGBA array goes.
int i;
for(i=0;i<src.length;i++)
{
bits[i*4] =
bits[i*4+1] =
bits[i*4+2] = ~src[i]; //Invert the source bits
bits[i*4+3] = 0xff; // the alpha.
}

//Now put these nice RGBA pixels into a Bitmap object

Bitmap bm = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bm.copyPixelsFromBuffer(ByteBuffer.wrap(bits));

关于android - 如何从原始图像获取位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5626795/

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