Xamarin的Android.将字节数组转换为位图.Skia Decoder返回false



当尝试将存储在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;
}

Result:一些图像转换成功,但其他图像得到skia decode返回false。总是显示相同的图像,而相同的其他图像得到错误。

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

我发现这里解决了类似的问题,但我无法将其转换为c#。

有没有人知道一个解决办法,从字节数组加载位图没有这些问题?

终于修好了!!

我必须做一个这样的解决方案:

/// 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向byteArray添加"D9"来生成位图。DecodeByteArray .

所以,唯一适合我的解决方案是从byteArray创建一个文件并解码该文件

相关内容

  • 没有找到相关文章

最新更新