1

mono で c# servicestack を使用して独自の REST API を開発しました。ファイルのダウンロードを除いて、期待どおりに機能します。ファイルの先頭にいくつかのビットが追加されていることに気付きました。たとえば、次の画像を参照してください。ダウンロードされたイメージのこのヘキサ表現

mono bugzilla にバグを報告しましたが、その間、クライアントの画像応答をオーバーライドして、最初に追加されたものを削除して画像を機能させたいと考えています。ファイルに保存する前に受信したストリームを編集してC#クライアントで試してみましたが、正常に動作します。

ボレー ライブラリをオーバーライドして、不正な形式のイメージではなく、最高のパフォーマンスでクリーンなイメージを取得する方法と場所を知る必要があります。

更新 04:37 PM: com.android.volley.toolbox.ImageRequest を変更する必要があると思います >> 試してみて、問題がなければ解決策を投稿します。

よろしく、シャヒーン

4

1 に答える 1

1

com.android.volley.toolbox.ImageRequest のメソッド doParse を修正しました

private Response<Bitmap> doParse(NetworkResponse response){

        byte[] data = response.data;
        byte [] pattern = fromHexString("FFD8FFE000");
        int position = matchPosition(data,pattern);
        if(position>0)
            data = Arrays.copyOfRange(data, position, data.length-position);
        ....
        ....
        ....
        ....
       ..}

私が使用したヘルパーメソッドは次のとおりです。

  public static int matchPosition(byte [] a, byte [] b){
      int matchLength=0;
      int maxSearch = 30>a.length?a.length:30;
    for (int i =0;i<maxSearch;i++) {
      if (a[i]==b[0] && i+b.length<a.length){
          for(int j = 0;j< b.length;j++ )
          {
              if((i+j)==a.length-1)
                  return -1;
              if(a[i+j]==b[j])
                  matchLength++;
          }
          if(matchLength == b.length)
              return i;
          else
              matchLength = 0; 
      }
    }
    return -1; 
  }


private static byte[] fromHexString(final String encoded) {
    if ((encoded.length() % 2) != 0)
        throw new IllegalArgumentException("Input string must contain an even number of characters");

    final byte result[] = new byte[encoded.length()/2];
    final char enc[] = encoded.toCharArray();
    for (int i = 0; i < enc.length; i += 2) {
        StringBuilder curr = new StringBuilder(2);
        curr.append(enc[i]).append(enc[i + 1]);
        result[i/2] = (byte) Integer.parseInt(curr.toString(), 16);
    }
    return result;
}

この回避策により、上記の問題が解決されました。

于 2013-11-10T18:18:00.910 に答える