2012-08-11 13 views
6

Bitmapオブジェクトに何らかの処理(品質向上と少しのサイズ変更)を行い、bitmap.compress()関数を使用してファイル名を "myfile.png"として保存します。"setImageBitmap()"を使わずにImageViewをpngファイルで読み込む方法は?

newbitmap = processImage(bitmap); 
FileOutputStream fos = context.openFileOutput("myfile.png", Context.MODE_PRIVATE); 
newbitmap.compress(CompressFormat.PNG, 100, fos); 

は、今私はImageViewにこのイメージをロードしたいが、私はそれを行うためにsetImageBitmap()を使用傾けます。何か別の選択肢はありますか?私はsetImageBitmap()を使用傾ける

理由は、私はウィジェットのRemoteViewsを使用して、画像が大きい場合失敗しましたバインダー取引エラーにつながるビットマップ方式を使用していますということです。

私は以下のコードを使用して画像のURIを設定しようとしましたが、画像はImageViewにロードされません:あなたの助けを

RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 

File internalFile = context.getFileStreamPath("myfile.png"); 
Uri internal = Uri.fromFile(internalFile); 
rv.setImageViewUri(R.id.widgetImageView, internal); 
updateAppWidget(awID, rv); 

感謝を!

+2

バイト配列を送信する方法はありますか?次に、反対側からビットマップをデコードします。よく分かりません。 – Shaiful

答えて

2

、あなたはMODE_WORLD_READABLE代わりのMODE_PRIVATEにモードを設定する必要があります。ウィジェットはホーム画面のプロセスで処理され、モードを正しく設定しないとファイルにアクセスできないためです。また、

FileOutputStream fos = context.openFileOutput("myfile.png", Context.MODE_WORLD_READABLE); 

Uri.parse()getPath()の代わりfromFile()を使用しますと

FileOutputStream fos = context.openFileOutput("myfile.png", Context.MODE_PRIVATE); 

だから、この行を置き換えます。 fromFile()はAndroid 2.2以上でのみ動作します。

Uri internal = Uri.Parse(internalFile.getPath()); 

希望します。

1

rv.setImageViewUri(R.id.widgetImageView, internal);の代わりにrv.setUri(R.id.widgetImageView, "setImageURI", "file://myfile.png");を使用すると、画像が正しく読み込まれているようです。あなたはそれを試してみたいかもしれません。

それでも問題が解決しない場合は、setImageBitmapメソッドを使用できるように画像を縮小するオプションがあります。 例:内部ストレージ内の画像を保存しながら

public static Bitmap scaleDownBitmap(Bitmap photo, int newHeight, Context context) { 

final float densityMultiplier = context.getResources().getDisplayMetrics().density;   

int h= (int) (newHeight*densityMultiplier); 
int w= (int) (h * photo.getWidth()/((double) photo.getHeight())); 

photo=Bitmap.createScaledBitmap(photo, w, h, true); 

return photo; 
} 
関連する問題