私のAndroidアプリケーションにはビットマップがあり、このビットマップから切り出された別のビットマップを作成したいと考えています。つまり、元のビットマップから特定の部分を取得したいと考えています。
使用してBitmap.createBitmap(Bitmap source, int x, int y, int width, int height)
いますが、見返りに得られる画像が拡大されているように見えます。
何が原因で、どうすれば修正できますか? 助けてください
Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height) は間違いなく正しい方法です。パラメータを間違って使用しているだけだと思います。
たとえば、img という名前の 100x100 ビットマップの中央の 50x50 ピクセルを取得するには、次のようにします。
Bitmap.createBitmap(img, 25, 25, 50, 50);
私のアドバイス:
r = this.getContext().getResources();
Drawable copyFrom= r.getDrawable(R.drawable.OriginalPNG);
Bitmap b1 = Bitmap.createBitmap(IMAGES_WIDTH, IMAGES_HEIGHT,Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(b1);
copyFrom.setBounds(0, 0, IMAGES_WIDTH, IMAGES_HEIGHT);
copyFrom.draw(canvas);
Bitmap copyTo;
copyTo = Bitmap.createBitmap(copyFrom, x, y, W, H);
ここで、IMAGES_WIDTH と IMAGES_HEIGHT は元の PNG の寸法で、W、H はコピーする領域の寸法です。x と y は、コピーを開始する元の PNG 上のポイントを指定します。x,y を両方とも 0 にすることは、左上隅から開始することを意味します。
Rect re=new Rect(350, 150, 350, 150);
public void takePicture(final String fileName) {
Log.i(TAG, "Tacking picture");
PictureCallback callback = new PictureCallback() {
private String mPictureFileName = fileName;
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Log.i(TAG, "Saving a bitmap to file");
Bitmap picture = BitmapFactory.decodeByteArray(data, 0, data.length);
Bitmap finalBitmap = Bitmap.createBitmap(picture, 850, 500, 960, 720);
try {
FileOutputStream out = new FileOutputStream(mPictureFileName);
finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
finalBitmap.recycle();
mCamera.startPreview();
} catch (Exception e) {
e.printStackTrace();
}
}
};
mCamera.takePicture(null, null, callback);
}