0

実際にはビットマップであるにコピーしたいと思います。その後、file-output-streamの内容をBitmapFactory.decodeStreamに渡します。その結果、画像が破損します。これらのもののための私のコードは以下の通りです。

private void copyInStreamToFile(InputStream is) {
    byte buf[] = new byte[1024];
    int len;

    FileOutputStream fos;
    try {
        fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
        while ((len = is.read(buf)) > 0)
            fos.write(buf, 0, len);
        fos.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

private static FileInputStream getStream() throws FileNotFoundException {
    return context.openFileInput(FILENAME);
}

私はこれをダウンロードメソッド内で呼んでいます

ビットマップdownloadBitmap(String url){final int IO_BUFFER_SIZE = 4 * 1024;

    // AndroidHttpClient is not allowed to be used from the main thread
    final HttpClient client = AndroidHttpClient.newInstance("Android");
    final HttpGet getRequest = new HttpGet(url);

    try {
        HttpResponse response = client.execute(getRequest);
        final int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode != HttpStatus.SC_OK) {
            Log.w("ImageDownloader", "Error " + statusCode
                    + " while retrieving bitmap from " + url);
            return null;
        }

        final HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream inputStream = null;
            try {
                inputStream = entity.getContent();
                copyInStreamToFile(new FlushedInputStream(inputStream));

                DeviceProperties device = new DeviceProperties(activity);
                return decodeBitampFromResource(device.getDeviceHeight(),
                        device.getDeviceWidth());
            } finally {
                if (inputStream != null) {
                    inputStream.close();
                }
                entity.consumeContent();
            }
        }

デコードを行う最後の方法は次のとおりです。

public static Bitmap decodeBitampFromResource(int reqWidth, int reqHeight) {
    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    FileInputStream fis;
    InputStream is;
    Bitmap bitmap = null;
    // kanonika tha vriskei to megethos tis photo alla kapoio problima
    // iparxei me ton sixronismo
    try {
        fis = getStream();

        options.inJustDecodeBounds = true;

        BitmapFactory.decodeStream(fis, null, options);

        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options, reqWidth,
                reqHeight);


        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        fis.close();
        fis = getStream();

        bitmap = BitmapFactory.decodeStream(fis, null, options);
        fis.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();

    }
        return bitmap;


}

file-output-streamの内容をクリアする必要がありますか?私がAndroid開発者から知っているように、openFileOutputはファイルを開いてその内容を上書きするか、存在しない場合は作成します。

4

0 に答える 0