1

尝试将存储在 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返回false。总是显示相同的图像,而其他相同的图像会出现错误。

在 iOS 应用程序上使用相同的数据库,并且所有图像都正确显示。图片是jpeg。

我发现在这里解决了类似的问题,但我无法将其翻译成 C#。

有谁知道从字节数组加载位图而没有这些问题的解决方法?

4

1 回答 1

3

终于搞定了!!!

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

/// 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 创建一个文件并解码该文件。希望它可以帮助将来的人。

于 2014-05-23T16:21:39.813 回答