2011-11-19 8 views
20

私のアンドロイドアプリケーションで解像度が1000x600のドロウアブルフォルダにjpgイメージがあります。 私はそれができるどのように1500を返す私はbitMap .getWidth()を呼び出し、この後、このビットマップのgetWidthが間違った値を返します

Bitmap bitMap = BitmapFactory.decodeResource(getResources(), R.drawable.image); 

のようなビットマップにそのイメージをロードしますか?そして、イメージの正しい幅と高さを得る方法?

答えて

38

これはおそらく密度が異なるためです。あなたのリソースはおそらく中密度のフォルダに保存されていますが、あなたのデバイスはhdpiです。中密度は160dpi、高密度は240dpiです。したがって、あなたのビットマップは元のサイズの1.5倍に拡大されます。詳細はdocument on multiple screensを参照してください。

リソースが正しい密度で利用できない場合、システムはデフォルトのリソースをロードし、現在の画面の密度と一致するように必要に応じてリソースを拡大または縮小します。

高密度化を目的とする場合は、drawableまたはdrawable-mdpiの代わりにdrawable-hdpiを使用します。

更新:

あなたはそれが密度を無視したい場合は、描画可能nodpiフォルダにそれを置きます。同じ文書からも:

事前スケーリングを避ける最も簡単な方法は、nodpi構成修飾子を使用してリソースディレクトリにリソースを配置することです。例えば:システムがこのフォルダからicon.pngのビットマップを使用する場合

res/drawable-nodpi/icon.png 

は、それが現在のデバイスの密度に基づいてスケーリングしません。

+0

私の場合、スケーリングは必要ありません。すべての画面で同じサイズの同じイメージが必要です。私の頭に浮かぶ最初の解決策は、そのイメージを3つのドロウアブルフォルダにコピーすることですが、同じイメージを3つコピーすることはお勧めできません。別の解決策がありますか? –

+2

スケーリングしたくない場合は、それらをdrawable-nodpiというフォルダに入れることができます。詳細:http://developer.android.com/guide/topics/resources/providing-resources.html – Albin

+0

OK、回答が編集され、その部分が追加されました。ありがとう –

関連する問題