0

ksoap2 ライブラリを使用して消費している .net ASMX Web サービスがあります。このサービスでは、まずユーザーの画像を保存し、後で取得します。ただし、一度取得すると、バイト配列はそのままですが、BitmapFactory はそれをデコードできず、null を返します。

バイト配列に変換するには:

Bitmap viewBitmap = Bitmap.createBitmap(imageView.getWidth(),
imageView.getHeight(), Bitmap.Config.ARGB_8888);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
viewBitmap.compress(CompressFormat.PNG, 0 /* ignored for PNG */, bos);
byte[] bitmapdata = bos.toByteArray();

Web サービスは、byte[] 形式の bytearray を受け入れます。

配列をビットマップに変換するには:

byte[] blob= info.get(Main.KEY_THUMB_BYTES).getBytes();
Bitmap bmp=BitmapFactory.decodeByteArray(blob,0,blob.length); // Return null :(
imageView.setImageBitmap(bmp);

部分的な分析から、バイト配列は変更されていないように見えます。では、なぜデコードすると null が返されるのでしょうか? 画像を保存して Web サービスに渡す方がよいでしょうか? バイト配列全体を分析したわけではないので、少し変わったのではないかと推測しています。

何かご意見は?どうもありがとう!

更新: 次 を使用して byte[] を文字列に変換しようとしました:

Base64.encodeToString( bos.toByteArray(), Base64.DEFAULT);

そして、次を使用してデコードします。

byte[] blob= Base64.decode(info.get(Main.KEY_THUMB_BYTES));

今私が得るのは白い写真だけです。ここで何が問題なのかわかりません。助けてください。

更新: この画像をデータベース内のvarchar(max)型の列に保存しています。このバイト配列文字列を別の SQL データ型に格納する必要がありますか? 私は SQL の経験があまりないので、テキストを Unicode に変換しなかったため、varchar を使用しました。

ありがとう!

4

1 に答える 1

0

バイト配列を、文字列で転送しやすい Base64 に変換します。

public static String bitmapToBase64(Bitmap bitmap) {
        byte[] bitmapdata = bitmapToByteArray(bitmap);
        return Base64.encodeBytes(bitmapdata);
    }

    public static byte[] bitmapToByteArray(Bitmap bitmap) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        bitmap.compress(CompressFormat.PNG, 0 /* ignored for PNG */, bos);
        byte[] bitmapdata = bos.toByteArray();
        return bitmapdata;
    }

public static Bitmap base64ToBitmap(String strBase64) throws IOException {
    byte[] bitmapdata = Base64.decode(strBase64);
    Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0,
            bitmapdata.length);
    return bitmap;
}

また、画像ファイルだけでなく、すべてのファイル タイプに対しても実行できます。

public static String fileToBase64(String path) throws IOException {
    byte[] bytes = fileToByteArray(path);
    return Base64.encodeBytes(bytes);
}

public static byte[] fileToByteArray(String path) throws IOException {
    File imagefile = new File(path);
    byte[] data = new byte[(int) imagefile.length()];
    FileInputStream fis = new FileInputStream(imagefile);
    fis.read(data);
    fis.close();
    return data;
}


public static void base64ToFile(String path, String strBase64)
        throws IOException {
    byte[] bytes = Base64.decode(strBase64);
    byteArrayTofile(path, bytes);
}

public static void byteArrayTofile(String path, byte[] bytes)
        throws IOException {
    File imagefile = new File(path);
    File dir = new File(imagefile.getParent());
    if (!dir.exists()) {
        dir.mkdirs();
    }
    FileOutputStream fos = new FileOutputStream(imagefile);
    fos.write(bytes);
    fos.close();
}
于 2012-07-01T05:05:43.743 に答える