そのため、ビットマップ ファイルを縮小して、メモリ サイズを超えずに画像を表示できるようにしています。ここで Android のチュートリアルを参照しました。
私が見つけたのは、これが私の画像を縮小してサイズが大きくなりすぎないようにするだけでなく、画像の一部を切り取っていることです. というかそうらしい。画像が画面の一部を占めるようにしたいだけです。ビットマップを縮小して画像全体を表示するにはどうすればよいですか?
ヘルプ、アイデア、または提案を提供していただければ、とても感謝しています。また、単純な間違いを犯していると思われる場合は、指摘してください。ありがとう!
コードは次のとおりです。
String fileName = data.getStringExtra("file");
image.setImageBitmap(decodeSampledBitmapFromFile(fileName, screenWidth, screenHeight / 2));
public static Bitmap decodeSampledBitmapFromFile(String file, int reqWidth, int reqHeight){
//first decode with inJustDecodeBounds = true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(file, options);
//calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
//decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
System.gc();
return BitmapFactory.decodeFile(file, options);
}
public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight){
//raw height and width of image
final int imageHeight = options.outHeight;
final int imageWidth = options.outWidth;
int inSampleSize = 1;
if (imageHeight > reqHeight || imageWidth > reqWidth){
if (imageWidth > imageHeight){
inSampleSize = Math.round((float) imageHeight / (float) reqHeight);
}else{
inSampleSize = Math.round((float) imageWidth / (float) reqWidth);
}//end of second if statement
}//end of first if statement
return inSampleSize;
}//end of calculateInSampleSize
public void getDisplaySize(){
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
//get the screen dimensions
try{
display.getSize(size);
screenWidth = size.x;
screenHeight = size.y;
buttonHeight = view.getHeight();
screenLength = (int) (screenHeight / 5);
imageWidth = (int) (screenWidth / 4);
}catch (NoSuchMethodError e){
//for older versions of android
screenWidth = display.getWidth();
screenHeight = display.getHeight();
buttonHeight = view.getHeight();
screenLength = (int) (screenHeight / 5);
imageWidth = (int) (screenWidth / 4);
}//end of try/catch block
}//end of getDisplaySize() method