Я пытаюсь обрезать растровое изображение. Сначала я уменьшаю исходное растровое изображение, чтобы оно поместилось внутри представления, затем я рисую прямоугольник в представлении, который пользователь может перемещать и масштабировать, чтобы обрезать изображение, так же, как вы можете сделать в Instagram, когда импортируете изображение из своей галереи. Проблема, с которой я сталкиваюсь, заключается в масштабировании прямоугольника, чтобы он соответствовал исходному масштабу растрового изображения для обрезки. Вот что происходит:
Середина квадрата – это то, каким должен быть конечный результат
И что мы на самом деле получаем:
Я знаю, что это просто математика, но прошлой ночью я потратил несколько часов, пытаясь понять ее. Что я делаю неправильно?
Bitmap bmp;
float scalefactor = (float)this.mOriginalBitmap.getWidth() / (float)this.mBmpScaledForView.getWidth();
float dh = (this.mCropBoxRect.right - this.mCropBoxRect.left) * (scalefactor-1f);
float dv = (this.mCropBoxRect.bottom - this.mCropBoxRect.top) * (scalefactor-1f);
float l = (float)this.mCropBoxRect.left + dh/2f;
float r = (float)this.mCropBoxRect.right + dh/2f;
float t = (float)this.mCropBoxRect.top + dv/2f;
float b = (float)this.mCropBoxRect.bottom + dv/2f;
RectF scaleRec = new RectF(l, t, r, b);
bmp = Bitmap.createBitmap(this.mOriginalBitmap, (int)scaleRec.left, (int)scaleRec.top, (int)scaleRec.width(), (int)scaleRec.height());
bmp = Bitmap.createScaledBitmap(bmp, MyConsts.outputSize, MyConsts.outputSize, false);