我想实现一个像照片拍照的应用程序,它将我拍摄的照片裁剪成方形并顺时针旋转它以保持画像。将位图裁剪为方形没有问题,但裁剪不是从照片的角落开始的。 (x,y)=(0,0)照片的左侧部分被裁剪掉。我想从原始位图的左上角裁剪。有什么帮助吗?
以下是拍照和裁剪图片的代码:
Activity_New_Food.java
public class Activity_New_Food extends Activity {
byte[] byteArray;
ImageView foodPhoto;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_food);
foodPhoto = (ImageView) findViewById(R.id.anf_foodPhoto);
byteArray = getIntent().getByteArrayExtra("FOOD_PIC");
Bitmap original_bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
Matrix matrix = new Matrix();
matrix.postRotate(90);
int value = 0;
if (original_bmp.getHeight() <= original_bmp.getWidth()) {
value = original_bmp.getHeight();
} else {
value = original_bmp.getWidth();
}
Bitmap finalBitmap = null;
finalBitmap = Bitmap.createBitmap(original_bmp, 0, 0, value, value, matrix, false);
Bitmap bmp = cropToSquare(original_bmp);
foodPhoto.setImageBitmap(finalBitmap);
}
答案 0 :(得分:0)
我已经稍微复制并修改了你的代码,它完全按照它应该的样子运行。 我创建一个300x500px位图并使用Canvas绘制它。然后我使用与您相同的方法裁剪和旋转。结果是一个300x300px位图,包含原始位图的顶部3/5,顺时针旋转90度。
我注意到在你的照片中,裁剪的位图实际上包含原始位图中不存在的区域(左边的边距线)。这不仅仅是一个裁剪问题,你应该确保首先正确编码字节数组......
在布局中添加第二个ImageView,以便您可以并排查看两个位图以进行比较。