文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

鸿蒙Java开发模式11:鸿蒙图片裁剪功能的实现

2024-12-03 10:52

关注

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

鸿蒙版图片裁剪功能,效果如下:

首页

图片裁剪区域:

裁剪结果:

Java代码实现如下:

  1. package com.example.javahm9.slice; 
  2.  
  3. import com.example.javahm9.ResourceTable; 
  4. import com.example.javahm9.util.CropImage; 
  5. import ohos.aafwk.ability.AbilitySlice; 
  6. import ohos.aafwk.content.Intent; 
  7. import ohos.agp.colors.RgbColor; 
  8. import ohos.agp.components.Button; 
  9. import ohos.agp.components.Component; 
  10. import ohos.agp.components.Text; 
  11. import ohos.agp.components.element.ShapeElement; 
  12.  
  13. public class MainAbilitySlice extends AbilitySlice { 
  14.  
  15.     //定义一个图片 
  16.     Component image; 
  17.     //定义一个文本 
  18.     Text text; 
  19.  
  20.     @Override 
  21.     public void onStart(Intent intent) { 
  22.         super.onStart(intent); 
  23.         super.setUIContent(ResourceTable.Layout_ability_main); 
  24.  
  25.         //获取图片对象对应的component 
  26.         image = findComponentById(ResourceTable.Id_result_image); 
  27.  
  28.          
  29.         if(intent.getBooleanParam("cropFlag",false)){ 
  30.             handleCrop(intent); 
  31.         } 
  32.          
  33.         text = (Text) findComponentById(ResourceTable.Id_text); 
  34.         if(intent.getIntParam("cropStatus",0) == 0){ 
  35.             text.setText("欢迎使用"); 
  36.         }else if(intent.getIntParam("cropStatus",0) == 1){ 
  37.             text.setText("剪裁取消"); 
  38.         }else if(intent.getIntParam("cropStatus",0) == 2){ 
  39.             text.setText("剪裁成功"); 
  40.         } 
  41.  
  42.  
  43.         //获取button对象对应的component 
  44.         Button button = (Button) findComponentById(ResourceTable.Id_button); 
  45.         // 设置button的属性及背景 
  46.         ShapeElement background = new ShapeElement(); 
  47.        // background.setRgbColor(new RgbColor(125, 125, 255)); 
  48.         background.setCornerRadius(25); 
  49.        // button.setBackground(background); 
  50.         if (button != null) { 
  51.             // 绑定点击事件 
  52.             button.setClickedListener(new Component.ClickedListener() { 
  53.                 public void onClick(Component v) { 
  54.                     begincrop(); 
  55.                 } 
  56.             }); 
  57.         } 
  58.     } 
  59.  
  60.     public void begincrop(){ 
  61.         CropImage.activity() 
  62.                 .setContext(this) 
  63.                 .setSource(ResourceTable.Media_a9) 
  64.                 .setBundleName("com.example.javahm9"
  65.                 .setAbilityName("com.example.javahm9.MainAbility"
  66.                 .setRequset_code(1234) 
  67.                 .start(super.getAbility(),this); 
  68.     } 
  69.  
  70.     //处理剪裁结果 
  71.     private void handleCrop(Intent result) { 
  72.         int resultImg = result.getIntParam("resultImg",0); 
  73.         int result_code = result.getIntParam("result_code" , 0); 
  74.         if(resultImg != 0){ 
  75.             CropImage.handleImage(result_code , image); 
  76.              
  77.         } 
  78.     } 
  79.  
  80.     @Override 
  81.     public void onActive() { 
  82.         super.onActive(); 
  83.     } 
  84.  
  85.     @Override 
  86.     public void onForeground(Intent intent) { 
  87.         super.onForeground(intent); 
  88.     } 

裁剪工具类实现

  1. package com.example.javahm9.util; 
  2.  
  3. import ohos.aafwk.ability.Ability; 
  4. import ohos.aafwk.ability.AbilitySlice; 
  5. import ohos.aafwk.content.Intent; 
  6. import ohos.agp.components.Component; 
  7. import ohos.agp.render.Canvas; 
  8. import ohos.agp.render.Paint; 
  9. import ohos.agp.render.PixelMapHolder; 
  10. import ohos.app.Context; 
  11. import ohos.media.image.PixelMap; 
  12. import ohos.utils.net.Uri; 
  13.  
  14.  
  15.  
  16. public final class CropImage { 
  17.  
  18.     //存一个context 
  19.     private static Context mContext; 
  20.  
  21.     //图片资源文件 
  22.     private static int msource; 
  23.  
  24.     //裁减结果 
  25.     public static final boolean CROPFLAG = true
  26.  
  27.     //空的构造器 
  28.     private CropImage() { 
  29.     } 
  30.  
  31.     //内部类初始化 
  32.     public static ActivityBuilder activity() { 
  33.         return new ActivityBuilder(null , null , null , 0); 
  34.     } 
  35.  
  36.      
  37.     public static void handleImage(int result, Component component) { 
  38.  
  39.         //203表示裁剪成功(203为自定义的数字) 
  40.         if (result == 203) { 
  41.             //获得原始位图 
  42.             PixelMap pixelMap = BitmapUtils.getOriginalPixelMap(mContext , msource).get(); 
  43.  
  44.             //创建屏幕工具类 获得屏幕的宽度 
  45.             CropWindowHandler windowHandler = new CropWindowHandler(mContext); 
  46.  
  47.              
  48.             float ratio = (float) windowHandler.getWindowWidth()/(float) pixelMap.getImageInfo().size.width; 
  49.  
  50.             //获得裁剪后的位图 
  51.             PixelMap cropped = CropOverlayView.getCroppedPixelMap(); 
  52.             PixelMapHolder pixelMapHolder = new PixelMapHolder(cropped); 
  53.  
  54.             //创建bitmaputils工具类,获得位图相关数据 
  55.             BitmapUtils bitmapUtils = new BitmapUtils(mContext, cropped, 400, msource); 
  56.  
  57.              
  58.             Component.DrawTask drawTask = new Component.DrawTask() { 
  59.                 @Override 
  60.                 public void onDraw(Component component, Canvas canvas) { 
  61.  
  62.                     //获得行为动作 
  63.                     int[] action = CropImageView.getActionResult(); 
  64.                     //获得动作数目 
  65.                     int actionIndex = CropImageView.getActionIndexResult(); 
  66.                     //循环执行旋转、翻转动作 
  67.                     for (int i = 0; i < actionIndex; i++) { 
  68.                         if (action[i] == 1) { 
  69.                             //rotate图像 
  70.                             canvas.rotate(90, bitmapUtils.getRealPixelMapWidth() / 2 * ratio, bitmapUtils.getRealPixelMapHeight() / 2 * ratio); 
  71.                         } else if (action[i] == 2) { 
  72.                             //水平翻转 
  73.                             //向下移动高度 
  74.                             canvas.translate(bitmapUtils.getRealPixelMapWidth() * ratio, 0); 
  75.                             //向y轴负方向缩放一倍 
  76.                             canvas.scale(-1f, 1f); 
  77.                         } else if (action[i] == 3) { 
  78.                             //垂直翻转 
  79.                             //向下移动高度 
  80.                             canvas.translate(0, bitmapUtils.getRealPixelMapHeight() * ratio); 
  81.                             //向y轴负方向缩放一倍 
  82.                             canvas.scale(1f, -1f); 
  83.                         } 
  84.                     } 
  85.  
  86.                     //按照原来的比例进行缩放 
  87.                     canvas.scale(ratio , ratio); 
  88.                     //画图 
  89.                     canvas.drawPixelMapHolder(pixelMapHolder, 200, 230, new Paint()); 
  90.                 } 
  91.             }; 
  92.  
  93.             //为component增加drawtask方法 
  94.             component.addDrawTask(drawTask); 
  95.         } 
  96.     } 
  97.  
  98.     public static PixelMap getCroppedPixelMap(){ 
  99.         return CropOverlayView.getCroppedPixelMap(); 
  100.     } 
  101.  
  102.     public static final class ActivityBuilder { 
  103.  
  104.         //设置图片的Uri 
  105.         private final Uri mSource; 
  106.  
  107.         //需要跳转回的bundle的名字 
  108.         private String bundleName; 
  109.  
  110.         //需要跳转回的Ability的名字 
  111.         private String abilityName; 
  112.  
  113.         //request_code 
  114.         private int request_code; 
  115.  
  116.         //初始化 记录一些信息 
  117.         private ActivityBuilder(Uri source , String bundle , String ability , int request) { 
  118.             mSource = source; 
  119.             bundleName = bundle; 
  120.             abilityName = ability; 
  121.             request_code = request; 
  122.         } 
  123.  
  124.         //返回一个intent 
  125.         public Intent getIntent(Context context) { 
  126.             return getIntent(context, CropImageActivity.class); 
  127.         } 
  128.  
  129.         //返回一个intent 用来实现页面跳转 
  130.         public Intent getIntent(Context context, Class cls) { 
  131.             Intent intent = new Intent(); 
  132.             intent.setParam("source", msource); 
  133.             if(bundleName != null){ 
  134.                 intent.setParam("bundleName" , bundleName); 
  135.             } 
  136.             if(abilityName != null){ 
  137.                 intent.setParam("abilityName" , abilityName); 
  138.             } 
  139.             if(request_code != 0){ 
  140.                 intent.setParam("request_code" , request_code); 
  141.             } 
  142.             return intent; 
  143.         } 
  144.  
  145.         //页面跳转 
  146.         public void start(Ability ability, AbilitySlice abilitySlice) { 
  147.             start(ability, abilitySlice, request_code); 
  148.         } 
  149.  
  150.         //页面跳转 
  151.         public void start(Ability ability, AbilitySlice abilitySlice, int requestCode) { 
  152.             //给crop添加操作 
  153.             AbilitySlice cropImageAbilitySlice = new CropImageActivity(); 
  154.             abilitySlice.presentForResult(cropImageAbilitySlice, getIntent(ability), requestCode); 
  155.         } 
  156.  
  157.         //设置资源图片,被裁减的图片的id 
  158.         public ActivityBuilder setSource(int source) { 
  159.             msource = source; 
  160.             return this; 
  161.         } 
  162.  
  163.         //设置context 
  164.         public ActivityBuilder setContext(Context context) { 
  165.             mContext = context; 
  166.             return this; 
  167.         } 
  168.  
  169.         //设置需要跳转回的bundle名字 
  170.         public ActivityBuilder setBundleName(String s){ 
  171.             bundleName = s; 
  172.             return this; 
  173.         } 
  174.  
  175.         //设置需要跳转回的ability名字 
  176.         public ActivityBuilder setAbilityName(String s){ 
  177.             abilityName = s; 
  178.             return this; 
  179.         } 
  180.  
  181.         //设置需要跳转回时的code 
  182.         public ActivityBuilder setRequset_code(int i){ 
  183.             request_code = i; 
  184.             return this; 
  185.         } 
  186.  
  187.     } 
  188.  
  189.  
  190.  
  191.  
  192. package com.example.javahm9.util; 
  193.  
  194. import ohos.aafwk.ability.AbilitySlice; 
  195. import ohos.aafwk.content.Intent; 
  196. import ohos.aafwk.content.Operation; 
  197. import ohos.agp.colors.RgbColor; 
  198. import ohos.agp.components.Button; 
  199. import ohos.agp.components.Component; 
  200. import ohos.agp.components.DependentLayout; 
  201. import ohos.agp.components.element.ShapeElement; 
  202. import ohos.agp.utils.RectFloat; 
  203. import ohos.bundle.AbilityInfo; 
  204. import ohos.media.image.PixelMap; 
  205.  
  206. import static ohos.agp.components.ComponentContainer.LayoutConfig.MATCH_PARENT; 
  207.  
  208.  
  209.  
  210. public class CropImageActivity extends AbilitySlice { 
  211.  
  212.     //定义此slice的Dependent布局 
  213.     private DependentLayout myLayout = new DependentLayout(this); 
  214.  
  215.     //被裁减图片 
  216.     private Component mPicture; 
  217.  
  218.     //被裁减图片的位图 
  219.     private PixelMap mPixelMap; 
  220.  
  221.     //位图工具类 
  222.     private BitmapUtils mBitmapUtils; 
  223.  
  224.     //屏幕工具类 
  225.     private CropWindowHandler mCropWindowHandler; 
  226.  
  227.     //裁剪框 
  228.     private Component mCropBound; 
  229.  
  230.     //裁剪框工具类 
  231.     private CropOverlayView mCropOverlayView; 
  232.  
  233.     //图片资源 
  234.     private int mSource; 
  235.  
  236.     //图片上边距 
  237.     private final int topIndex = 400; 
  238.  
  239.     //图片工具类 
  240.     private CropImageView mCropImageView; 
  241.  
  242.     //裁减结果的矩阵 
  243.     public static RectFloat croppedRectFloat; 
  244.  
  245.     //裁减结果的pixelmap 
  246.     public static PixelMap croppedPixelMap; 
  247.  
  248.     @Override 
  249.     public void onStart(Intent intent) { 
  250.         super.onStart(intent); 
  251.  
  252.         //创建本slice的布局文件 
  253.         DependentLayout.LayoutConfig config = new DependentLayout.LayoutConfig(MATCH_PARENT, MATCH_PARENT); 
  254.  
  255.         //设置默认竖屏 
  256.         setDisplayOrientation(AbilityInfo.DisplayOrientation.PORTRAIT); 
  257.         //设置布局的背景 
  258.         myLayout.setLayoutConfig(config); 
  259.         ShapeElement element = new ShapeElement(); 
  260.         element.setRgbColor(new RgbColor(255, 255, 255)); 
  261.         myLayout.setBackground(element); 
  262.  
  263.         //设置button,image等 
  264.         setupViews(intent); 
  265.  
  266.         //加载裁剪框、背景图片等等 
  267.         loadInput(); 
  268.  
  269.         //加载布局 
  270.         super.setUIContent(myLayout); 
  271.     } 
  272.  
  273.     //按钮和图片初始化 
  274.     private void setupViews(Intent intent) { 
  275.         buttonInit(intent); 
  276.         imageInit(intent); 
  277.     } 
  278.  
  279.     //按钮初始化 
  280.     private void buttonInit(Intent intent) { 
  281.         //创建button 
  282.         Button cancel = cancelButton(intent); 
  283.         Button rotate = rotateButton(); 
  284. //        Button horfilp = horizontalFilpButton(); 
  285. //        Button verfilp =  verticalFilpButton(); 
  286.  
  287.         Button crop = cropButton(intent); 
  288.  
  289.         //将button添加到布局 
  290.         myLayout.addComponent(cancel); 
  291.         myLayout.addComponent(rotate); 
  292. //        myLayout.addComponent(horfilp); 
  293. //        myLayout.addComponent(verfilp); 
  294.         myLayout.addComponent(crop); 
  295.     } 
  296.  
  297.     //取消按钮 
  298.     private Button cancelButton(Intent intent) { 
  299.         //创建取消button 
  300.         Button cancel = new Button(this); 
  301.         //为button增加布局条件 
  302.         DependentLayout.LayoutConfig cancelLayoutConfig = new DependentLayout.LayoutConfig(); 
  303.         cancelLayoutConfig.setMargins(140, 50, 0, 0); 
  304.         cancelLayoutConfig.addRule(DependentLayout.LayoutConfig.ALIGN_TOP); 
  305.         cancelLayoutConfig.addRule(DependentLayout.LayoutConfig.ALIGN_PARENT_LEFT); 
  306.         //设置背景颜色 
  307.         cancel.setLayoutConfig(cancelLayoutConfig); 
  308.         ShapeElement cancelElement = new ShapeElement(); 
  309.         cancelElement.setRgbColor(new RgbColor(155, 155, 155)); 
  310.         cancelElement.setCornerRadius(25); 
  311.         cancel.setBackground(cancelElement); 
  312.         //设置文本 
  313.         cancel.setText("取消"); 
  314.         cancel.setTextSize(55); 
  315.         cancel.setHeight(180); 
  316.         cancel.setWidth(220); 
  317.         //绑定点击方法 
  318.         cancel.setClickedListener(new Component.ClickedListener() { 
  319.             public void onClick(Component v) { 
  320.                 //为按钮绑定方法 
  321.                 cancel(intent); 
  322.             } 
  323.         }); 
  324.  
  325.         return cancel; 
  326.     } 
  327.  
  328.     //旋转按钮 
  329.     private Button rotateButton() { 
  330.         //创建旋转button 
  331.         Button rotate = new Button(this); 
  332.         //为button增加布局条件 
  333.         DependentLayout.LayoutConfig rotateLayoutConfig = new DependentLayout.LayoutConfig(); 
  334.         rotateLayoutConfig.setMargins(500, 50, 0, 0); 
  335.         rotateLayoutConfig.addRule(DependentLayout.LayoutConfig.ALIGN_TOP); 
  336.         rotateLayoutConfig.addRule(DependentLayout.LayoutConfig.ALIGN_PARENT_LEFT); 
  337.         rotate.setLayoutConfig(rotateLayoutConfig); 
  338.         //设置背景颜色 
  339.         ShapeElement rotateElement = new ShapeElement(); 
  340.         rotateElement.setRgbColor(new RgbColor(255, 228, 181)); 
  341.         rotateElement.setCornerRadius(25); 
  342.         rotate.setBackground(rotateElement); 
  343.         //设置文本 
  344.         rotate.setText("旋转"); 
  345.         rotate.setTextSize(55); 
  346.         rotate.setHeight(180); 
  347.         rotate.setWidth(220); 
  348.         //绑定点击方法 
  349.         rotate.setClickedListener(new Component.ClickedListener() { 
  350.             public void onClick(Component v) { 
  351.                 rotate(); 
  352.             } 
  353.         }); 
  354.  
  355.         return rotate; 
  356.     } 
  357.  
  358.     //水平翻转按钮 
  359.     private Button horizontalFilpButton() { 
  360.         //创建翻转button 
  361.         Button filp = new Button(this); 
  362.         //为button增加布局条件 
  363.         DependentLayout.LayoutConfig filpLayoutConfig = new DependentLayout.LayoutConfig(); 
  364.         filpLayoutConfig.setMargins(0, 50, 300, 0); 
  365.         filpLayoutConfig.addRule(DependentLayout.LayoutConfig.ALIGN_TOP); 
  366.         filpLayoutConfig.addRule(DependentLayout.LayoutConfig.ALIGN_PARENT_RIGHT); 
  367.         //设置背景颜色 
  368.         filp.setLayoutConfig(filpLayoutConfig); 
  369.         ShapeElement filpElement = new ShapeElement(); 
  370.         filpElement.setRgbColor(new RgbColor(180, 238, 180)); 
  371.         filpElement.setCornerRadius(25); 
  372.         filp.setBackground(filpElement); 
  373.         //设置文本 
  374.         filp.setText("horFilp"); 
  375.         filp.setTextSize(40); 
  376.         filp.setHeight(85); 
  377.         filp.setWidth(220); 
  378.         //绑定点击方法 
  379.         filp.setClickedListener(new Component.ClickedListener() { 
  380.             public void onClick(Component v) { 
  381.                 horizontalFlip(); 
  382.             } 
  383.         }); 
  384.  
  385.         return filp; 
  386.     } 
  387.  
  388.     //垂直翻转按钮 
  389.     private Button verticalFilpButton() { 
  390.         //创建翻转button 
  391.         Button filp = new Button(this); 
  392.         //为button增加布局条件 
  393.         DependentLayout.LayoutConfig filpLayoutConfig = new DependentLayout.LayoutConfig(); 
  394.         filpLayoutConfig.setMargins(0, 145, 300, 0); 
  395.         filpLayoutConfig.addRule(DependentLayout.LayoutConfig.ALIGN_TOP); 
  396.         filpLayoutConfig.addRule(DependentLayout.LayoutConfig.ALIGN_PARENT_RIGHT); 
  397.         //设置背景颜色 
  398.         filp.setLayoutConfig(filpLayoutConfig); 
  399.         ShapeElement filpElement = new ShapeElement(); 
  400.         filpElement.setRgbColor(new RgbColor(180, 238, 180)); 
  401.         filpElement.setCornerRadius(25); 
  402.         filp.setBackground(filpElement); 
  403.         //设置文本 
  404.         filp.setText("verFilp"); 
  405.         filp.setTextSize(40); 
  406.         filp.setHeight(85); 
  407.         filp.setWidth(220); 
  408.         //绑定点击方法 
  409.         filp.setClickedListener(new Component.ClickedListener() { 
  410.             public void onClick(Component v) { 
  411.                 verticalFlip(); 
  412.             } 
  413.         }); 
  414.  
  415.         return filp; 
  416.     } 
  417.  
  418.     //裁剪按钮 
  419.     private Button cropButton(Intent intent) { 
  420.         //创建裁剪button 
  421.         Button crop = new Button(this); 
  422.         //为button增加布局条件 
  423.         DependentLayout.LayoutConfig cropLayoutConfig = new DependentLayout.LayoutConfig(); 
  424.         cropLayoutConfig.setMargins(820, 50, 0, 0); 
  425.         cropLayoutConfig.addRule(DependentLayout.LayoutConfig.ALIGN_TOP); 
  426.         cropLayoutConfig.addRule(DependentLayout.LayoutConfig.ALIGN_PARENT_LEFT); 
  427.         //设置背景颜色 
  428.         crop.setLayoutConfig(cropLayoutConfig); 
  429.         ShapeElement cropElement = new ShapeElement(); 
  430.         cropElement.setRgbColor(new RgbColor(0, 125, 155)); 
  431.         cropElement.setCornerRadius(25); 
  432.         crop.setBackground(cropElement); 
  433.         //设置文本 
  434.         crop.setText("裁剪"); 
  435.         crop.setTextSize(55); 
  436.         crop.setHeight(180); 
  437.         crop.setWidth(220); 
  438.         //绑定点击方法 
  439.         crop.setClickedListener(new Component.ClickedListener() { 
  440.             public void onClick(Component v) { 
  441.                 crop(intent); 
  442.             } 
  443.         }); 
  444.  
  445.         return crop; 
  446.     } 
  447.  
  448.     //图片初始化 
  449.     private void imageInit(Intent intent) { 
  450.  
  451.         //获得图片的id 
  452.         int source = intent.getIntParam("source", 0); 
  453.         mSource = source; 
  454.  
  455.         //根据图片id获取pixelmap 
  456.         PixelMap pixelMapOriginal = BitmapUtils.getOriginalPixelMap(this, mSource).get(); 
  457.         mPixelMap = pixelMapOriginal; 
  458.  
  459.         //创建bitmaputils工具类,获得位图相关数据 
  460.         BitmapUtils bitmapUtils = new BitmapUtils(this , mPixelMap ,topIndex , mSource ); 
  461.  
  462.         //创建cropwindowhandler工具类,获得windows相关数据 
  463.         CropWindowHandler cropWindowHandler = new CropWindowHandler(this); 
  464.  
  465.         //创建图片工具类,用来获得图片 
  466.         mCropImageView = new CropImageView(mPixelMap , this ,  mSource , topIndex); 
  467.  
  468.         //获取展示图片的component 
  469.         mPicture = mCropImageView.getmPicture(); 
  470.  
  471.         //计算图片的位置,使得图片居中显示,计算出图片距离屏幕左边的空白 
  472.         int margin = cropWindowHandler.getWindowWidth()/2 - bitmapUtils.getPixelMapWidth()/2; 
  473.  
  474.         //给mPicture增加布局 
  475.         DependentLayout.LayoutConfig componentLayoutConfig = new DependentLayout.LayoutConfig(); 
  476.         componentLayoutConfig.setMargins(0, topIndex, 0, 0);//边距 
  477.         mPicture.setLayoutConfig(componentLayoutConfig); 
  478.  
  479.         //将图片加入布局 
  480.         myLayout.addComponent(mPicture); 
  481.  
  482.     } 
  483.  
  484.     //初始化工具类,加载裁剪框等等 
  485.     private void loadInput() { 
  486.  
  487.         //创建位图工具类 
  488.         mBitmapUtils = new BitmapUtils(this, mPixelMap, 400, mSource); 
  489.  
  490.         //创建屏幕工具类 
  491.         mCropWindowHandler = new CropWindowHandler(this); 
  492.  
  493.         //创建裁剪框的工具类 
  494.         mCropOverlayView = new CropOverlayView(this, mBitmapUtils, mCropWindowHandler); 
  495.  
  496.         //获得裁剪框 
  497.         mCropBound = mCropOverlayView.getmCropBound(); 
  498.  
  499.         //将裁剪框加入布局文件 
  500.         myLayout.addComponent(mCropBound); 
  501.     } 
  502.  
  503.     //取消裁剪方法 
  504.     private void cancel(Intent intentOriginal) { 
  505.         Intent intent = new Intent(); 
  506.  
  507.         //增加裁剪状态及结果 
  508.         intent.setParam("cropFlag", !CropImage.CROPFLAG); 
  509.         intent.setParam("cropStatus", 1); 
  510.  
  511.         // 通过Intent中的OperationBuilder类构造operation对象,指定设备标识(空串表示当前设备)、应用包名、Ability名称 
  512.         Operation operation = new Intent.OperationBuilder() 
  513.                 .withDeviceId(""
  514.                 .withBundleName(intentOriginal.getStringParam("bundleName")) 
  515.                 .withAbilityName(intentOriginal.getStringParam("abilityName")) 
  516.                 .build(); 
  517.         // 把operation设置到intent中 
  518.         intent.setOperation(operation); 
  519.  
  520.         //跳转 
  521.         startAbility(intent); 
  522.     } 
  523.  
  524.     //图片旋转的方法 
  525.     private void rotate(){ 
  526.         //图片旋转 
  527.         mCropImageView.rotateOnce(); 
  528.         //裁剪框旋转 
  529.         mCropOverlayView.rotateOnce(); 
  530.     } 
  531.  
  532.     //图片水平翻转的方法 
  533.     private void horizontalFlip(){ 
  534.         //图片翻转 
  535.         mCropImageView.horizontalFilp(); 
  536.         //裁剪框翻转 
  537.         mCropOverlayView.horizontalFilpOnce(); 
  538.     } 
  539.  
  540.     //图片垂直翻转的方法 
  541.     private void verticalFlip(){ 
  542.         mCropImageView.verticalFilp(); 
  543.         //裁剪框翻转 
  544.         mCropOverlayView.verticalFilpOnce(); 
  545.     } 
  546.  
  547.     //成功裁剪方法 
  548.     private void crop(Intent intentOriginal) { 
  549.  
  550.         //计算裁减后的pixelmap并存放于cropoverlayview中 
  551.         mCropOverlayView.croppedPixel(this); 
  552.  
  553.         //显示到MainActivity 
  554.         Intent intent = new Intent(); 
  555.  
  556.         //增加裁剪状态及结果 
  557.         intent.setParam("cropFlag", CropImage.CROPFLAG); 
  558.         intent.setParam("cropStatus", 2); 
  559.         intent.setParam("result_code" , 203); 
  560.  
  561.         RectFloat cropRect = mCropOverlayView.getmCropRect(); 
  562.         //塞入裁剪结果 
  563.         intent.setParam("resultImg", mSource); 
  564.         croppedRectFloat = mCropOverlayView.getmCropRect(); 
  565.         croppedPixelMap = mPixelMap; 
  566.  
  567.         // 通过Intent中的OperationBuilder类构造operation对象,指定设备标识(空串表示当前设备)、应用包名、Ability名称 
  568.         Operation operation = new Intent.OperationBuilder() 
  569.                 .withDeviceId(""
  570.                 .withBundleName(intentOriginal.getStringParam("bundleName")) 
  571.                 .withAbilityName(intentOriginal.getStringParam("abilityName")) 
  572.                 .build(); 
  573.         // 把operation设置到intent中 
  574.         intent.setOperation(operation); 
  575.  
  576.         //跳转 
  577.         startAbility(intent); 
  578.  
  579.     } 
  580.  
  581.     @Override 
  582.     protected void onStop() { 
  583.         super.onStop(); 
  584.     } 

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

来源:鸿蒙社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯