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;
}

結果: 一部の画像は正常に変換されていますが、その他の画像ではスキーア デコードが 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 を使用して byteArray に「D9」を追加してビットマップを生成しようとしましたが、うまくいきませんでした。

したがって、私にとって有効な唯一の回避策は、byteArray からファイルを作成し、そのファイルをデコードすることです。将来誰かに役立つことを願っています。

于 2014-05-23T16:21:39.813 に答える