Skip to content

Commit 159cf66

Browse files
committed
Add CropInfo
1 parent 394489a commit 159cf66

File tree

3 files changed

+108
-32
lines changed

3 files changed

+108
-32
lines changed

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
VERSION_NAME=1.1.0
2-
VERSION_CODE=6
1+
VERSION_NAME=1.1.1-SNAPSHOT
2+
VERSION_CODE=7
33
GROUP=com.naver.android.helloyako
44

55
POM_DESCRIPTION=Android Image Crop View
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package com.naver.android.helloyako.imagecrop.model;
2+
3+
import android.graphics.Bitmap;
4+
5+
import com.naver.android.helloyako.imagecrop.util.BitmapLoadUtils;
6+
7+
/**
8+
* Created by helloyako on 2016. 5. 10..
9+
*/
10+
public class CropInfo {
11+
private float scale;
12+
private float viewBitmapWidth;
13+
private float viewImageTop;
14+
private float viewImageLeft;
15+
private float cropTop;
16+
private float cropLeft;
17+
18+
private float cropWidth;
19+
private float cropHeight;
20+
21+
22+
public CropInfo(float scale, float viewBitmapWidth, float viewImageTop, float viewImageLeft, float cropTop, float cropLeft, float cropWidth, float cropHeight) {
23+
this.scale = scale;
24+
this.viewBitmapWidth = viewBitmapWidth;
25+
this.viewImageTop = viewImageTop;
26+
this.viewImageLeft = viewImageLeft;
27+
this.cropTop = cropTop;
28+
this.cropLeft = cropLeft;
29+
this.cropWidth = cropWidth;
30+
this.cropHeight = cropHeight;
31+
}
32+
33+
public Bitmap getCroppedImage(String path) {
34+
int reqSize = 4000;
35+
Bitmap bitmap = BitmapLoadUtils.decode(path, reqSize, reqSize);
36+
return getCroppedImage(bitmap);
37+
}
38+
39+
public Bitmap getCroppedImage(Bitmap bitmap) {
40+
float scale = this.scale * (viewBitmapWidth / (float) bitmap.getWidth());
41+
float x = Math.abs(viewImageLeft - cropLeft) / scale;
42+
float y = Math.abs(viewImageTop - cropTop) / scale;
43+
float actualCropWidth = cropWidth / scale;
44+
float actualCropHeight = cropHeight / scale;
45+
46+
if (x < 0) {
47+
x = 0;
48+
}
49+
50+
if (y < 0) {
51+
y = 0;
52+
}
53+
54+
if (y + actualCropHeight > bitmap.getHeight()) {
55+
actualCropHeight = bitmap.getHeight() - y;
56+
}
57+
58+
if (x + actualCropWidth > bitmap.getWidth()) {
59+
actualCropWidth = bitmap.getWidth() - x;
60+
}
61+
62+
return Bitmap.createBitmap(bitmap, (int) x, (int) y, (int) actualCropWidth, (int) actualCropHeight);
63+
}
64+
65+
public float getScale() {
66+
return scale;
67+
}
68+
69+
public float getViewBitmapWidth() {
70+
return viewBitmapWidth;
71+
}
72+
73+
public float getViewImageTop() {
74+
return viewImageTop;
75+
}
76+
77+
public float getViewImageLeft() {
78+
return viewImageLeft;
79+
}
80+
81+
public float getCropTop() {
82+
return cropTop;
83+
}
84+
85+
public float getCropLeft() {
86+
return cropLeft;
87+
}
88+
89+
public float getCropWidth() {
90+
return cropWidth;
91+
}
92+
93+
public float getCropHeight() {
94+
return cropHeight;
95+
}
96+
}

imagecropview/src/main/java/com/naver/android/helloyako/imagecrop/view/ImageCropViewBase.java

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import android.widget.ImageView;
3636

3737
import com.naver.android.helloyako.imagecrop.R;
38+
import com.naver.android.helloyako.imagecrop.model.CropInfo;
3839
import com.naver.android.helloyako.imagecrop.util.BitmapLoadUtils;
3940
import com.naver.android.helloyako.imagecrop.view.graphics.FastBitmapDrawable;
4041

@@ -959,42 +960,21 @@ public void run() {
959960
}
960961

961962
public Bitmap getCroppedImage() {
962-
963-
Bitmap viewBitmap = getViewBitmap();
964-
Bitmap sourceBitmap = viewBitmap;
965-
966-
float scale = baseScale * getScale();
963+
CropInfo cropInfo = getCropInfo();
967964

968965
if (imageFilePath != null) {
969-
int reqSize = 4000;
970-
sourceBitmap = BitmapLoadUtils.decode(imageFilePath, reqSize, reqSize);
971-
scale = scale * ((float) viewBitmap.getWidth() / (float) sourceBitmap.getWidth());
966+
return cropInfo.getCroppedImage(imageFilePath);
967+
} else {
968+
return cropInfo.getCroppedImage(getViewBitmap());
972969
}
970+
}
973971

972+
public CropInfo getCropInfo() {
973+
Bitmap viewBitmap = getViewBitmap();
974+
float scale = baseScale * getScale();
974975
RectF viewImageRect = getBitmapRect();
975976

976-
float x = Math.abs(viewImageRect.left - mCropRect.left) / scale;
977-
float y = Math.abs(viewImageRect.top - mCropRect.top) / scale;
978-
float actualCropWidth = mCropRect.width() / scale;
979-
float actualCropHeight = mCropRect.height() / scale;
980-
981-
if (x < 0) {
982-
x = 0;
983-
}
984-
985-
if (y < 0) {
986-
y = 0;
987-
}
988-
989-
if (y + actualCropHeight > sourceBitmap.getHeight()) {
990-
actualCropHeight = sourceBitmap.getHeight() - y;
991-
}
992-
993-
if (x + actualCropWidth > sourceBitmap.getWidth()) {
994-
actualCropWidth = sourceBitmap.getWidth() - x;
995-
}
996-
997-
return Bitmap.createBitmap(sourceBitmap, (int) x, (int) y, (int) actualCropWidth, (int) actualCropHeight);
977+
return new CropInfo(scale, viewBitmap.getWidth(), viewImageRect.top, viewImageRect.left, mCropRect.top, mCropRect.left, mCropRect.width(), mCropRect.height());
998978
}
999979

1000980
public Bitmap getViewBitmap() {

0 commit comments

Comments
 (0)