詹子聪 5 лет назад
Родитель
Сommit
ff7a76ce0f

+ 26 - 11
app/src/main/java/com/miekir/ocr/CameraActivity.java

@@ -5,6 +5,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
+import android.graphics.Bitmap;
 import android.graphics.ImageFormat;
 import android.graphics.Point;
 import android.graphics.SurfaceTexture;
@@ -19,6 +20,7 @@ import android.hardware.camera2.TotalCaptureResult;
 import android.hardware.camera2.params.StreamConfigurationMap;
 import android.media.Image;
 import android.media.ImageReader;
+import android.net.Uri;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
@@ -30,22 +32,19 @@ import android.util.SparseIntArray;
 import android.view.Surface;
 import android.view.TextureView;
 import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
+import android.view.ViewTreeObserver;
 import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import com.miekir.ocr.base.BaseCameraActivity;
-import com.miekir.ocr.tool.Utils;
+import com.miekir.ocr.tool.CameraPreviewTool;
 import com.miekir.ocr.view.AutoFitTextureView;
 import com.miekir.ocr.view.GlideV4ImageEngine;
+import com.miekir.ocr.view.cropper.CropImageView;
 import com.zhihu.matisse.Matisse;
 import com.zhihu.matisse.MimeType;
-import com.zhihu.matisse.engine.impl.GlideEngine;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -97,6 +96,8 @@ public class CameraActivity extends BaseCameraActivity implements View.OnClickLi
     private static final int MAX_PREVIEW_HEIGHT = 1080;
     private int mSensorOrientation;
 
+    private CropImageView civ_crop;
+
     private TextureView.SurfaceTextureListener textureListener = new TextureView.SurfaceTextureListener() {
         @Override
         public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
@@ -106,7 +107,7 @@ public class CameraActivity extends BaseCameraActivity implements View.OnClickLi
         @Override
         public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
             if (null != textureView || null == imageDimension) {
-                textureView.setTransform(Utils.configureTransform(width, height, imageDimension, CameraActivity.this));
+                textureView.setTransform(CameraPreviewTool.configureTransform(width, height, imageDimension, CameraActivity.this));
             }
         }
 
@@ -157,6 +158,19 @@ public class CameraActivity extends BaseCameraActivity implements View.OnClickLi
         textureView = findViewById(R.id.textureView);
         textureView.setSurfaceTextureListener(textureListener);
 
+        civ_crop = findViewById(R.id.civ_crop);
+        civ_crop.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+            @Override
+            public void onGlobalLayout() {
+                civ_crop.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+                //自定义裁剪-全屏的裁剪
+                Bitmap.Config conf = Bitmap.Config.ARGB_8888; // see other conf types
+                Bitmap bitmap = Bitmap.createBitmap(civ_crop.getWidth(), civ_crop.getHeight(), conf);
+                civ_crop.setImageBitmap(bitmap);
+            }
+        });
+
+
         findViewById(R.id.fl_take).setOnClickListener(this);
         findViewById(R.id.iv_album).setOnClickListener(this);
     }
@@ -177,7 +191,7 @@ public class CameraActivity extends BaseCameraActivity implements View.OnClickLi
 
             Size largest = Collections.max(
                     Arrays.asList(map.getOutputSizes(ImageFormat.JPEG)),
-                    new Utils.CompareSizesByArea());
+                    new CameraPreviewTool.CompareSizesByArea());
 
 
             int displayRotation = getWindowManager().getDefaultDisplay().getRotation();
@@ -223,7 +237,7 @@ public class CameraActivity extends BaseCameraActivity implements View.OnClickLi
                 maxPreviewHeight = MAX_PREVIEW_HEIGHT;
             }
 
-            imageDimension = Utils.chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class),
+            imageDimension = CameraPreviewTool.chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class),
                     rotatedPreviewWidth, rotatedPreviewHeight, maxPreviewWidth,
                     maxPreviewHeight, largest);
 
@@ -237,7 +251,7 @@ public class CameraActivity extends BaseCameraActivity implements View.OnClickLi
             }
 
             if (null != textureView || null == imageDimension) {
-                textureView.setTransform(Utils.configureTransform(width, height, imageDimension, CameraActivity.this));
+                textureView.setTransform(CameraPreviewTool.configureTransform(width, height, imageDimension, CameraActivity.this));
             }
 
             mCameraManager.openCamera(cameraId, stateCallback, null);
@@ -500,11 +514,12 @@ public class CameraActivity extends BaseCameraActivity implements View.OnClickLi
         }
     }
 
+    private List<Uri> mSelected;
     @Override
     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_CHOOSE) {
-
+            mSelected = Matisse.obtainResult(data);
         }
     }
 }

+ 9 - 6
app/src/main/java/com/miekir/ocr/MainActivity.java

@@ -2,18 +2,16 @@ package com.miekir.ocr;
 
 import android.Manifest;
 import android.annotation.SuppressLint;
-import android.app.Activity;
 import android.content.Intent;
-import android.content.pm.PackageManager;
+import android.graphics.Bitmap;
 import android.net.Uri;
-import android.os.Build;
 import android.os.Bundle;
 
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AlertDialog;
 import androidx.appcompat.app.AppCompatActivity;
 
-import com.miekir.ocr.view.cropper.CropImageActivity;
+import com.miekir.common.utils.SizeTool;
 import com.miekir.ocr.view.cropper.CropImageView;
 import com.tbruyelle.rxpermissions2.RxPermissions;
 
@@ -39,8 +37,9 @@ public class MainActivity extends AppCompatActivity {
                 .subscribe(granted -> {
                     if (granted) {
                         // 打开相机
-                        startActivity(new Intent(MainActivity.this, CameraActivity.class));
                         //startActivity(new Intent(MainActivity.this, CropImageActivity.class));
+
+                        startActivity(new Intent(MainActivity.this, CameraActivity.class));
                         finish();
                         //photoSelect();
                     } else {
@@ -81,6 +80,10 @@ public class MainActivity extends AppCompatActivity {
 
     private void getUri(Uri uri) {
         CropImageView cropImageView = findViewById(R.id.cropImageView);
-        cropImageView.setImageUriAsync(uri);
+        //cropImageView.setImageUriAsync(uri);
+        //自定义裁剪-全屏的裁剪
+        Bitmap.Config conf = Bitmap.Config.ARGB_8888; // see other conf types
+        Bitmap bitmap = Bitmap.createBitmap(SizeTool.SCREEN_WIDTH, SizeTool.SCREEN_HEIGHT, conf);
+        cropImageView.setImageBitmap(bitmap);
     }
 }

+ 3 - 3
app/src/main/java/com/miekir/ocr/tool/Utils.java

@@ -21,7 +21,7 @@ import java.util.List;
  * Created by kinjal.dhamat on 4/13/2017.
  */
 
-public class Utils {
+public class CameraPreviewTool {
 
     public static Matrix configureTransform(int viewWidth, int viewHeight, Size mPreviewSize, Activity context) {
 
@@ -67,9 +67,9 @@ public class Utils {
         }
 
         if (bigEnough.size() > 0) {
-            return Collections.min(bigEnough, new Utils.CompareSizesByArea());
+            return Collections.min(bigEnough, new CameraPreviewTool.CompareSizesByArea());
         } else if (notBigEnough.size() > 0) {
-            return Collections.max(notBigEnough, new Utils.CompareSizesByArea());
+            return Collections.max(notBigEnough, new CameraPreviewTool.CompareSizesByArea());
         } else {
             Log.e("tag", "Couldn't find any suitable preview size");
             return choices[0];

+ 2 - 0
app/src/main/java/com/miekir/ocr/view/cropper/CropImageAnimation.java

@@ -94,6 +94,8 @@ final class CropImageAnimation extends Animation implements Animation.AnimationL
       mAnimPoints[i] =
           mStartBoundPoints[i] + (mEndBoundPoints[i] - mStartBoundPoints[i]) * interpolatedTime;
     }
+
+    //mCropOverlayView.setBounds(mAnimPoints, SizeTool.SCREEN_WIDTH, SizeTool.SCREEN_HEIGHT);
     mCropOverlayView.setBounds(mAnimPoints, mImageView.getWidth(), mImageView.getHeight());
 
     for (int i = 0; i < mAnimMatrix.length; i++) {

+ 12 - 4
app/src/main/java/com/miekir/ocr/view/cropper/CropImageOptions.java

@@ -243,14 +243,22 @@ public class CropImageOptions implements Parcelable {
     aspectRatioX = 1;
     aspectRatioY = 1;
 
-    borderLineThickness = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 3, dm);
+    //borderLineThickness = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 3, dm);
+    // 自定义裁剪-没有边界
+    borderLineThickness = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0, dm);
     borderLineColor = Color.argb(170, 255, 255, 255);
     borderCornerThickness = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, dm);
-    borderCornerOffset = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, dm);
+    //borderCornerOffset = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, dm);
+    // 自定义裁剪-没有边距
+    borderCornerOffset = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0, dm);
     borderCornerLength = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 14, dm);
-    borderCornerColor = Color.WHITE;
+    // 自定义裁剪-边角颜色
+    borderCornerColor = Color.parseColor("#12ABE3");
+    //borderCornerColor = Color.WHITE;
 
-    guidelinesThickness = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, dm);
+    // 自定义裁剪-网格线
+    guidelinesThickness = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 0, dm);
+    //guidelinesThickness = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, dm);
     guidelinesColor = Color.argb(170, 255, 255, 255);
     backgroundColor = Color.argb(119, 0, 0, 0);
 

+ 4 - 1
app/src/main/java/com/miekir/ocr/view/cropper/CropImageView.java

@@ -25,7 +25,6 @@ import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Parcelable;
-import androidx.exifinterface.media.ExifInterface;
 import android.util.AttributeSet;
 import android.util.Pair;
 import android.view.LayoutInflater;
@@ -35,6 +34,8 @@ import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.ProgressBar;
 
+import androidx.exifinterface.media.ExifInterface;
+
 import com.miekir.ocr.R;
 
 import java.lang.ref.WeakReference;
@@ -329,7 +330,9 @@ public class CropImageView extends FrameLayout {
     View v = inflater.inflate(R.layout.crop_image_view, this, true);
 
     mImageView = v.findViewById(R.id.ImageView_image);
+    //自定义裁剪-全屏
     mImageView.setScaleType(ImageView.ScaleType.MATRIX);
+    //mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
 
     mCropOverlayView = v.findViewById(R.id.CropOverlayView);
     mCropOverlayView.setCropWindowChangeListener(

+ 2 - 0
app/src/main/java/com/miekir/ocr/view/cropper/CropWindowHandler.java

@@ -94,6 +94,8 @@ final class CropWindowHandler {
 
   /** Maximum height in pixels that the crop window can get. */
   public float getMaxCropHeight() {
+    // 自定义裁剪-高度
+    //return SizeTool.SCREEN_HEIGHT;
     return Math.min(mMaxCropWindowHeight, mMaxCropResultHeight / mScaleFactorHeight);
   }
 

+ 11 - 6
app/src/main/res/layout/activity_camera.xml

@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/activity_main"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -54,10 +53,16 @@
             android:layout_height="match_parent"
             android:orientation="vertical">
 
-            <Space
-                android:layout_width="wrap_content"
+
+            <com.miekir.ocr.view.cropper.CropImageView
+                android:id="@+id/civ_crop"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_weight="4"/>
+            <!--<com.miekir.ocr.view.cropper.CropOverlayView
+                android:layout_width="match_parent"
                 android:layout_height="0dp"
-                android:layout_weight="4" />
+                android:layout_weight="4"/>-->
 
 
             <LinearLayout
@@ -69,7 +74,7 @@
                 <View
                     android:layout_width="match_parent"
                     android:layout_height="0.8dp"
-                    android:background="@color/white" />
+                    android:background="@color/white"/>
 
                 <LinearLayout
                     android:layout_width="match_parent"
@@ -184,7 +189,7 @@
                         <TextView
                             android:layout_width="wrap_content"
                             android:layout_height="wrap_content"
-                            android:text="全范围"
+                            android:text="整单识别"
                             android:textColor="@color/white"
                             android:textSize="@dimen/size_text_title" />
                     </LinearLayout>

+ 3 - 2
app/src/main/res/layout/activity_main.xml

@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/activity_main"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
     <com.miekir.ocr.view.cropper.CropImageView
         android:id="@+id/cropImageView"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
+        android:layout_height="match_parent"
+        app:cropAutoZoomEnabled="false"/>
 
 </RelativeLayout>

+ 2 - 0
app/src/main/res/layout/crop_image_view.xml

@@ -9,6 +9,8 @@
         android:adjustViewBounds="true"
         android:scaleType="centerInside"
         tools:ignore="contentDescription"/>
+    <!--android:adjustViewBounds="true"
+    android:scaleType="centerInside"-->
 
     <com.miekir.ocr.view.cropper.CropOverlayView
         android:id="@+id/CropOverlayView"