奇妙なことが起こります - 少なくとも私には理解できません。
1 つの ImageButton に表示される画像 (w: 120px、h: 63px) があります。私が持っているその画像の唯一の変種は、drawable-hdpi に配置されています (他の描画可能なディレクトリはありません)。この画像とすべての解像度(密度)ですべて問題ありません.Androidはそれを非常にうまく処理します.
しかし、問題は、アルバムから写真 (たとえば、非常に大きな写真) を撮り、それをボタンのサイズ (前述の w: 120px h: 63px) にスケーリングし、その小さな画像を ImageButton の背景として設定するときです。
中密度 (160) のエミュレーターでテストしている場合は問題ありませんが、高密度ボタンを備えたデバイスでテストすると、スケーリングされた画像が小さく表示されるため、サイズが変更されます。
何が起こっているのか、拡大縮小した後に画像のサイズがもう一度変更されるのはなぜですか?
手がかりは高く評価されます。
画像のサイズ変更に使用するコードは次のとおりです。
public static void resizeAndSaveImage(String pathToResize, int newWidth, int newHeight, FileOutputStream output) {
try {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(pathToResize), null, options);
if (bitmap != null) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
resizedBitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
output.close();
}
} catch (Exception e) {
// ...
}
寸法パラメータは次のように渡されます: newWidth = 120、newHeight = 63。