在我的Android应用程序中,我有一个Bitmap,我想创建另一个从这个位图裁剪出来的位图。换句话说,我想从原始位图中获取特定部分。
我正在使用Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height)
但是我得到的图像似乎被放大了。
可能是什么原因,我该如何纠正? 请帮忙
答案 0 :(得分:1)
我的建议:
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都设为零意味着从左上角开始。
答案 1 :(得分:1)
Bitmap.createBitmap(Bitmap source,int x,int y,int width,int height)绝对是正确的方法。我怀疑你只是错误地使用了这些参数。
E.g。要获得名为img的100x100位图的中心50x50像素,您可以使用:
Bitmap.createBitmap(img,25,25,50,50);
答案 2 :(得分:0)
答案 3 :(得分: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);
}