在我的 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 都设为零意味着从左上角开始。
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);
}