2016-06-20 1 views
2

私は同じイメージの2つのコピーを持っています。そのうちの1つは、アプリケーションのリソースフォルダ(デフォルトドロアブル)の内側にあり、もう1つは外部ストレージにあります。BitmapFactoryは、Drawableとファイルからビットマップの相違サイズを返します

私は、次のコードでBitmapを得る:

// Get from storage 
BitmapFactory.decodeFile(image.getAbsolutePath()); 

// Get from resource 
BitmapFactory.decodeResource(getResources(), R.drawable.image); 

しかし、彼らは高さと幅にwrap_contentImageViewに異なるサイズになります。これをどうすれば解決できますか?

+0

'decodeResource()'は画面の密度を考慮に入れています。 'decodeFile()'はほとんど確かにしません。 – CommonsWare

+0

@CommonsWare私はそう思って、私はソースコードを探しています。 – Joshua

答えて

1

この現象は、BitmapFactoryの実装のためです。電話中にdecodeResourceStreamdecodeResourceからBitmapFactory.OptionsinDensity)に設定すると、BitmapFactory.Optionsがヌルの場合はDisplayMetrics.DENSITY_DEFAULTに設定されます。

一方はsetDensityFromOptionsに渡され、BitmapFactory.Optionsがヌルの場合はすぐに戻ります。

したがって、解決策の1つは、decodeFileの密度を次のコードでスケーリングすることです。

BitmapFactory.Options option = new BitmapFactory.Options(); 
option.inDensity = DisplayMetrics.DENSITY_DEFAULT; 
Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(), option); 

逆の場合は、次のコードを使用できます。

InputStream inputStream = context.getResources().openRawResource(R.drawable.image); 
Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 

「定数とリソースの種類の不一致」がありますが、それでもコンパイルできます。 decodeResourceopenRawResourceInputStreamと呼びます。これは問題ありません。

関連する問題