Xamarin 安卓。将字节数组转换为位图。 Skia 解码器返回 false

Posted

技术标签:

【中文标题】Xamarin 安卓。将字节数组转换为位图。 Skia 解码器返回 false【英文标题】:Xamarin Android. Transform Byte array to Bitmap. Skia Decoder returns false 【发布时间】:2014-05-05 14:25:03 【问题描述】:

尝试将存储在 SQLite 数据库中的一些图像作为 blob 转换为位图时出现以下错误。

[skia] --- decoder->decode returned false

我正在尝试以下代码:

// Loads a Bitmap from a byte array
public static Bitmap bytesToBitmap (byte[] imageBytes)

    Bitmap bitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);

    return bitmap;

结果:一些图像被成功转换,但其他图像得到 skia decode returned false。总是显示相同的图像,而其他相同的图像会出现错误。

ios 应用上使用相同的数据库,并且所有图像都正确显示。图片为 jpeg。

我发现类似问题已解决 here,但我无法将其翻译成 C#。

有没有人知道从字节数组加载位图而不会出现此类问题的解决方法?

【问题讨论】:

【参考方案1】:

终于搞定了!!!

我不得不做出这样的解决方法:

/// Loads a Bitmap from a byte array

public static Bitmap bytesToUIImage (byte[] bytes)

    if (bytes == null)
        return null;

    Bitmap bitmap;


    var documentsFolder = Environment.GetFolderPath (Environment.SpecialFolder.Personal);

    //Create a folder for the images if not exists
    System.IO.Directory.CreateDirectory(System.IO.Path.Combine (documentsFolder, "images"));

    string imatge = System.IO.Path.Combine (documents, "images", "image.jpg");


    System.IO.File.WriteAllBytes(imatge, bytes.Concat(new Byte[](byte)0xD9).ToArray());

    bitmap = BitmapFactory.DecodeFile(imatge);

    return bitmap;

请注意,创建的文件缺少 .jpeg 文件“D9”的结束字节,因此我必须手动添加它。我知道事实上我的图像包含了这个字节,我还尝试通过使用 BitmapFactory.DecodeByteArray 将“D9”添加到 byteArray 来生成位图,但它没有用。

所以,唯一对我有用的解决方法是从 byteArray 创建一个文件并解码该文件。希望它可以帮助将来的人。

【讨论】:

以上是关于Xamarin 安卓。将字节数组转换为位图。 Skia 解码器返回 false的主要内容,如果未能解决你的问题,请参考以下文章

将Java位图转换为字节数组

如何将字节数组转换为位图实例 (.NET)?

如何将字节数组中的图像文件数据转换为位图?

将NV21字节数组转换为位图可读格式[重复]

如何将从 C++ 发送的 cv::MAT 字节数组转换为 Java 中的位图?

Android:如何用相机拍照并将位图转换为字节数组并保存到sqlite db?