Bitmap
アスペクト比が維持され、Bitmap
幅全体を塗りつぶし、画像を垂直方向に中央揃えにして、余分な部分をトリミングするか、ギャップを0アルファピクセルで埋める、実行時に依存する幅と高さにaをスケーリングしたいと思います。
私は現在Bitmap
、すべての0アルファピクセルを作成してそのBitmap
上に画像を描画し、指定された正確な幅にスケーリングしてアスペクト比を維持することでビットマップを自分で再描画していますが、ピクセルデータが失われたりねじれたりしてしまいます。
これが私がそれをしている方法です:
Bitmap background = Bitmap.createBitmap((int)width, (int)height, Config.ARGB_8888);
float originalWidth = originalImage.getWidth(), originalHeight = originalImage.getHeight();
Canvas canvas = new Canvas(background);
float scale = width/originalWidth;
float xTranslation = 0.0f, yTranslation = (height - originalHeight * scale)/2.0f;
Matrix transformation = new Matrix();
transformation.postTranslate(xTranslation, yTranslation);
transformation.preScale(scale, scale);
canvas.drawBitmap(originalImage, transformation, null);
return background;
そこにライブラリがありますか、またはこれをより良くすることができるいくつかのより良いコードがありますか?できるだけ鮮明な画像にしたいのですが、自分の機能ではうまくいかないことはわかっていました。
フロートスケーリングの代わりに整数スケーリングを使用することで画像を正常に保つことができることはわかっていますが、幅を100%塗りつぶす必要があります。
ImageView
また、の機能については知っていGravity.CENTER_CROP
ますが、整数スケーリングも使用するため、画像の幅を切り落とす必要があります。