Android 图片编辑error

来源:互联网 发布:mysql 5.1.55.tar.gz 编辑:程序博客网 时间:2024/05/12 17:46

一、问题

1、调整锐度无效果,出现如下错误:

这里写图片描述

解决方案:
1、应该引用android.support.v8.renderscript 的包而不是android android.renderscript,下载android.support.v8.renderscript jar包放入libs文件夹引用,可以从Sdk\build-tools\xxxx\renderscript\lib 目录下拷贝renderscript-v8.jar,也可以直接用较高版本的build tools(较高的build tools已包含v8 jar)
2、在app build.gradle中添加,

defaultConfig {        ......        renderscriptTargetApi 19        renderscriptSupportModeEnabled true        .......    }

3、重新rebuild 工程即可

2、进入图片编辑,对图片进行手绘后进行镜像变换,镜像界面异常

修改如下:

 diff --git a/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/filters/ImageFilterDraw.java b/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/filters/ImageFilterDraw.javaindex 6b43d5b..2a84067 100755--- a/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/filters/ImageFilterDraw.java+++ b/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/filters/ImageFilterDraw.java@@ -33,6 +33,7 @@ import android.graphics.PathMeasure; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect;+import android.util.Log; import cn.com.protruly.vrbrowser.view.filtershow.filters.FilterDrawRepresentation.StrokeData; import cn.com.protruly.vrbrowser.view.filtershow.filters.FilterMirrorRepresentation.Mirror;@@ -269,15 +270,22 @@ public class ImageFilterDraw extends ImageFilter {             mCachedStrokes = 0;         }-        if (mCachedStrokes < mParameters.getDrawing().size()) {+        Vector<StrokeData> mDrawing = mParameters.getDrawing();//kang add,22/11/2017+        //[BEGIN-DEL] draw and Mirror display the abnormality,by kang,22/11/2017+/*        if (mCachedStrokes < mParameters.getDrawing().size()) {             fillBuffer(originalRotateToScreen);-        }+        }*/+        //[END]         canvas.drawBitmap(mOverlayBitmap, 0, 0, paint);-        StrokeData stroke = mParameters.getCurrentDrawing();-        if (stroke != null) {-            paint(stroke, canvas, originalRotateToScreen, quality);+        //[BEGIN-ADD] draw and Mirror display the abnormality,by kang,22/11/2017+//        StrokeData stroke = mParameters.getCurrentDrawing();//kang del+        for(StrokeData stroke:mDrawing) {+            if (stroke != null) {+                paint(stroke, canvas, originalRotateToScreen, quality);+            }         }+        //[END]     }

3、进入编辑图片操作几次就会出现

java.lang.OutOfMemoryError: Failed to allocate a 72000012 byte allocation with 4191936 free bytes and 42MB until OOM修改如下:$ git stOn branch VREditor4SYour branch is up-to-date with 'origin/VREditor4S'.Changes not staged for commit:  (use "git add <file>..." to update what will be committed)  (use "git checkout -- <file>..." to discard changes in working directory)        modified:   app/src/main/java/cn/com/protruly/vrbrowser/ui/activity/FilterShowActivity.java        modified:   app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/cache/ImageLoader.java        modified:   app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/imageshow/MasterImage.java        modified:   app/src/main/res/layout/filtershow_activity.xml        modified:   app/src/main/res/values/colors.xmlno changes added to commit (use "git add" and/or "git commit -a")rd0551@MI-DingKang MINGW64 /e/2_AppProject/VREditor3S (VREditor4S)$ git diffdiff --git a/app/src/main/java/cn/com/protruly/vrbrowser/ui/activity/FilterShowActivity.java b/app/src/main/java/cn/com/protruly/vrbrowser/ui                                                 /activity/FilterShowActivity.javaindex 65da309..998991b 100755--- a/app/src/main/java/cn/com/protruly/vrbrowser/ui/activity/FilterShowActivity.java+++ b/app/src/main/java/cn/com/protruly/vrbrowser/ui/activity/FilterShowActivity.java@@ -894,7 +894,7 @@ public class FilterShowActivity extends ActivityToolbarBase implements OnItemCli                 Rect bounds = new Rect();                 Bitmap originalHires = ImageLoader.loadOrientedConstrainedBitmap(master.getUri(),                         master.getActivity(), highresPreviewSize,-                        master.getOrientation(), bounds);+                        master.getOrientation(), bounds, true);                 master.setOriginalBounds(bounds);                 master.setOriginalBitmapHighres(originalHires);                 mBoundService.setOriginalBitmapHighres(originalHires);diff --git a/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/cache/ImageLoader.java b/app/src/main/java/cn/com/protruly/vrbrowser                                                 /view/filtershow/cache/ImageLoader.javaindex 22b1429..025d654 100755--- a/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/cache/ImageLoader.java+++ b/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/cache/ImageLoader.java@@ -520,8 +520,8 @@ public final class ImageLoader {      * @return downsampled bitmap or null if this operation failed.      */     public static Bitmap loadOrientedConstrainedBitmap(Uri uri, Context context, int maxSideLength,-                                                       int orientation, Rect originalBounds) {-        Bitmap bmap = loadConstrainedBitmap(uri, context, maxSideLength, originalBounds, true);+                                                       int orientation, Rect originalBounds, boolean isLarge) {+        Bitmap bmap = loadConstrainedBitmap(uri, context, maxSideLength, originalBounds, isLarge);//kang         if (bmap != null) {             bmap = orientBitmap(bmap, orientation);             if (bmap.getConfig() != Bitmap.Config.ARGB_8888) {diff --git a/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/imageshow/MasterImage.java b/app/src/main/java/cn/com/protruly/vrbro                                                 wser/view/filtershow/imageshow/MasterImage.javaindex 704a9a7..eea6fb1 100755--- a/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/imageshow/MasterImage.java+++ b/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/imageshow/MasterImage.java@@ -214,7 +214,7 @@ public class MasterImage implements RenderingRequestCaller {         Rect originalBounds = new Rect();         mOriginalBitmapLarge = ImageLoader.loadOrientedConstrainedBitmap(uri, getActivity(),                 Math.min(MAX_BITMAP_DIM, size),-                mOrientation, originalBounds);+                mOrientation, originalBounds, false);//kang         setOriginalBounds(originalBounds);         if (mOriginalBitmapLarge == null) {             return false;diff --git a/app/src/main/res/layout/filtershow_activity.xml b/app/src/main/res/layout/filtershow_activity.xmlindex 4eb38f1..4ee1af9 100755--- a/app/src/main/res/layout/filtershow_activity.xml+++ b/app/src/main/res/layout/filtershow_activity.xml@@ -19,7 +19,7 @@:...skipping...diff --git a/app/src/main/java/cn/com/protruly/vrbrowser/ui/activity/FilterShowActivity.java b/app/src/main/java/cn/com/protruly/vrbrowser/ui/activity/FilterShowActivity.javaindex 65da309..998991b 100755--- a/app/src/main/java/cn/com/protruly/vrbrowser/ui/activity/FilterShowActivity.java+++ b/app/src/main/java/cn/com/protruly/vrbrowser/ui/activity/FilterShowActivity.java@@ -894,7 +894,7 @@ public class FilterShowActivity extends ActivityToolbarBase implements OnItemClidiff --git a/app/src/main/java/cn/com/protruly/vrbrowser/ui/activity/FilterShowActivity.java b/app/src/main/java/cn/com/protruly/vrbrowser/ui/activity/FilterShowActivity.javaindex 65da309..998991b 100755--- a/app/src/main/java/cn/com/protruly/vrbrowser/ui/activity/FilterShowActivity.java+++ b/app/src/main/java/cn/com/protruly/vrbrowser/ui/activity/FilterShowActivity.java@@ -894,7 +894,7 @@ public class FilterShowActivity extends ActivityToolbarBase implements OnItemCli                 Rect bounds = new Rect();                 Bitmap originalHires = ImageLoader.loadOrientedConstrainedBitmap(master.getUri(),                         master.getActivity(), highresPreviewSize,-                        master.getOrientation(), bounds);+                        master.getOrientation(), bounds, true);                 master.setOriginalBounds(bounds);                 master.setOriginalBitmapHighres(originalHires);                 mBoundService.setOriginalBitmapHighres(originalHires);diff --git a/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/cache/ImageLoader.java b/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/cache/ImageLoader.javaindex 22b1429..025d654 100755--- a/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/cache/ImageLoader.java+++ b/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/cache/ImageLoader.java@@ -520,8 +520,8 @@ public final class ImageLoader {      * @return downsampled bitmap or null if this operation failed.      */     public static Bitmap loadOrientedConstrainedBitmap(Uri uri, Context context, int maxSideLength,-                                                       int orientation, Rect originalBounds) {-        Bitmap bmap = loadConstrainedBitmap(uri, context, maxSideLength, originalBounds, true);+                                                       int orientation, Rect originalBounds, boolean isLarge) {+        Bitmap bmap = loadConstrainedBitmap(uri, context, maxSideLength, originalBounds, isLarge);//kang         if (bmap != null) {             bmap = orientBitmap(bmap, orientation);             if (bmap.getConfig() != Bitmap.Config.ARGB_8888) {diff --git a/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/imageshow/MasterImage.java b/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/imageshow/MasterImage.javaindex 704a9a7..eea6fb1 100755--- a/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/imageshow/MasterImage.java+++ b/app/src/main/java/cn/com/protruly/vrbrowser/view/filtershow/imageshow/MasterImage.java@@ -214,7 +214,7 @@ public class MasterImage implements RenderingRequestCaller {         Rect originalBounds = new Rect();         mOriginalBitmapLarge = ImageLoader.loadOrientedConstrainedBitmap(uri, getActivity(),                 Math.min(MAX_BITMAP_DIM, size),-                mOrientation, originalBounds);+                mOrientation, originalBounds, false);//kang         setOriginalBounds(originalBounds);         if (mOriginalBitmapLarge == null) {             return false;

二、备注

resetGeometryImagesColorChooser.java----颜色选择----setup()ImageDraw.javaonTouchEvent->mFRep.startNewSection( mTmpPoint[0], mTmpPoint[1]);//画线FilterDrawRepresentation.java构造函数设置默认值为红色useParametersFrom负责划线FilterShowActivity.javaMasterImage.getImage().setPreset(oldPreset, filterRepresentation, true);// copy就是mirror翻转之后的presetCachingPipeline.javarenderHighres->getOriginalBitmapHighres->getBitmapCopy>applyGeometry->apply  //旋转画图的地方GeometryMathUtils.java  //裁剪相关操作类11-17 10:29:15.094 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err: java.lang.Exception:11-17 10:29:15.094 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.imageshow.GeometryMathUtils.concatMirrorMatrix(GeometryMathUtils.java:223)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.imageshow.GeometryMathUtils.getFullGeometryMatrix(GeometryMathUtils.java:457)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.imageshow.GeometryMathUtils.getTrueCropRect(GeometryMathUtils.java:483)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.imageshow.GeometryMathUtils.getCropSelectionToScreenMatrix(GeometryMathUtils.java:492)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.imageshow.GeometryMathUtils.getOriginalToScreen(GeometryMathUtils.java:401)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.imageshow.GeometryMathUtils.getImageToScreenMatrix(GeometryMathUtils.java:355)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.filters.ImageFilter.getOriginalToScreenMatrix(ImageFilter.java:82)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.filters.ImageFilterDraw.apply(ImageFilterDraw.java:334)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.pipeline.FilterEnvironment.applyRepresentation(FilterEnvironment.java:135)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.pipeline.ImagePreset.applyFilters(ImagePreset.java:539)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.pipeline.ImagePreset.apply(ImagePreset.java:455)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.pipeline.CachingPipeline.renderHighres(CachingPipeline.java:239)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.pipeline.HighresRenderingRequestTask.doInBackground(HighresRenderingRequestTask.java:75)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.pipeline.ProcessingTask.processRequest(ProcessingTask.java:70)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at cn.com.protruly.vrbrowser.view.filtershow.pipeline.ProcessingTaskController.handleMessage(ProcessingTaskController.java:60)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:107)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at android.os.Looper.loop(Looper.java:207)11-17 10:29:15.095 13366-13427/com.protruly.gallery3d.app:filtershow W/System.err:     at android.os.HandlerThread.run(HandlerThread.java:61)ImageFilterDraw.java//mParameters.getDrawing()存储的是画线的点数据//paint函数画线apply->drawData->paint IconView.java //图片编辑效果显示小框图相关文件
原创粉丝点击