【问题标题】:Cropped square bitmap is out of position裁剪的方形位图位置不正确
【发布时间】:2015-12-31 23:41:06
【问题描述】:

我想实现一个类似 Instagram 的拍照应用程序,它将我拍摄的照片裁剪成正方形并顺时针旋转,使其保持纵向。将位图裁剪为正方形没有问题,但裁剪不是从照片的角落开始的。 (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);

}

这是照片 http://imgur.com/a/2RGX2

【问题讨论】:

    标签: android image bitmap surfaceview crop


    【解决方案1】:

    我已经稍微复制和调整了您的代码,它完全按照它应该的样子做。 我创建了一个 300x500px 位图并使用 Canvas 绘制到它。然后我使用与您相同的方法进行裁剪和旋转。结果是一个 300x300px 的位图,其中包含原始位图的顶部 3/5,顺时针旋转了 90 度。

    我注意到,在您的图片中,裁剪后的位图实际上包含原始位图中不存在的区域(左侧的边线)。这不仅仅是一个裁剪问题,您应该首先确保字节数组被正确编码......

    向您的布局添加第二个 ImageView,以便您可以并排查看两个位图以进行比较。

    【讨论】:

      猜你喜欢
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      相关资源
      最近更新 更多