最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android實現圖片裁剪的兩種方法

 更新時間:2021年09月18日 10:59:27   作者:kcl5715305  
這篇文章主要為大家詳細介紹了android實現圖片裁剪的兩種方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

兩種android圖片裁剪方式,供大家參考,具體內容如下

一、相機拍完照之后利用系統(tǒng)自帶裁剪工具進行截取

public static void cropImage(Activity activity, Uri srcUri) {
        cropImageUri = srcUri;

        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(srcUri, "image/*");
        intent.putExtra("crop", "true");

        
        // 1.寬高和比例都不設置時,裁剪框可以自行調整(比例和大小都可以隨意調整)
        ////////////////////////////////////////////////////////////////
        // 2.只設置裁剪框寬高比(aspect)后,裁剪框比例固定不可調整,只能調整大小
        ////////////////////////////////////////////////////////////////
        // 3.裁剪后生成圖片寬高(output)的設置和裁剪框無關,只決定最終生成圖片大小
        ////////////////////////////////////////////////////////////////
        // 4.裁剪框寬高比例(aspect)可以和裁剪后生成圖片比例(output)不同,此時,
        // 會以裁剪框的寬為準,按照裁剪寬高比例生成一個圖片,該圖和框選部分可能不同,
        //  不同的情況可能是截取框選的一部分,也可能超出框選部分,向下延伸補足
        ////////////////////////////////////////////////////////////////

        // aspectX aspectY 是裁剪框寬高的比例
//        intent.putExtra("aspectX", 1);
//        intent.putExtra("aspectY", 1);
//        // outputX outputY 是裁剪后生成圖片的寬高
//        intent.putExtra("outputX", 300);
//        intent.putExtra("outputY", 300);

        // return-data為true時,會直接返回bitmap數據,但是大圖裁剪時會出現問題,推薦下面為false時的方式
        // return-data為false時,不會返回bitmap,但需要指定一個MediaStore.EXTRA_OUTPUT保存圖片uri
        intent.putExtra(MediaStore.EXTRA_OUTPUT, cropImageUri);
        intent.putExtra("return-data", false);

        activity.startActivityForResult(intent, CROP_IMAGE);

}

這樣圖片可以通過手勢來自由裁剪

二、自定義相機拍照界面,裁剪固定區(qū)域的圖片

這里用到了一個叫idcardcamera的三方,在此向原作者致敬,附上項目引用地址 ‘com.github.wildma:IDCardCamera:1.0.0'
有幾個地方,需要修改一下,我是在相機中間加了一個長方形的框,代碼片段如下:

float screenMinSize = Math.min(getResources().getDisplayMetrics().widthPixels, getResources().getDisplayMetrics().heightPixels);
        //根據screenMinSize,計算出cameraPreview的較寬的一邊,長寬比為標準的16:9
        float maxSize = screenMinSize / 9.0f * 16.0f;
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams((int) maxSize, (int) screenMinSize);
        layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
        mCameraPreview.setLayoutParams(layoutParams);
        float height = (int) (screenMinSize * 0.3);
        float density = getResources().getDisplayMetrics().density;  // 屏幕密度(0.75 / 1.0 / 1.5)
        float mywdith =(int) 136*density;
        int widthPixels = getResources().getDisplayMetrics().widthPixels;
        float width = (int) (widthPixels-mywdith);//75 47
        LinearLayout.LayoutParams containerParams = new LinearLayout.LayoutParams((int) width, ViewGroup.LayoutParams.MATCH_PARENT);
        LinearLayout.LayoutParams cropParams = new LinearLayout.LayoutParams((int) width, (int) height);
        mLlCameraCropContainer.setLayoutParams(containerParams);
        mIvCameraCrop.setLayoutParams(cropParams);

修改了 mIvCameraCrop的大小,給這個長方形框添加一個背景邊框,剛開始老是顯示不出來右邊的邊框,后來發(fā)現,拍照按鈕父布局的寬度為136dp,用代碼計算出實際占用的px,然后設置長方形的合適寬度,這樣就遮擋不住了,右邊的邊框就能夠顯示出來了,附上拍照的邏輯,選擇自動剪裁

/**
 * 拍照
 */
private void takePhoto() {
        mCameraPreview.setEnabled(false);
        mCameraPreview.takePhoto(new Camera.PictureCallback() {
            @Override
            public void onPictureTaken(final byte[] data, Camera camera) {
//                camera.stopPreview();
                camera.startPreview();
                //子線程處理圖片,防止ANR

//                setCropLayout();
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                        String imagePath = path;
                        ImageUtils.save(bitmap, imagePath, Bitmap.CompressFormat.JPEG);
                        int rotation = getWindowManager().getDefaultDisplay().getRotation();
                        int angle = ImageUtils.getBitmapDegree(imagePath);
                        if (mOrientation==90){
                            bitmap = ImageUtils.rotateBitmap(CameraActivity.this.bitmap, 180);
                        }

                        /**
                         * 計算裁剪位置
                         */
                        float left, top, right, bottom;
                        left = ((float) mLlCameraCropContainer.getLeft() - (float) mCameraPreview.getLeft()) / (float) mCameraPreview.getWidth();
                        top = (float) mIvCameraCrop.getTop() / (float) mCameraPreview.getHeight();
                        right = (float) mLlCameraCropContainer.getRight() / (float) mCameraPreview.getWidth();
                        bottom = (float) mIvCameraCrop.getBottom() / (float) mCameraPreview.getHeight();

                        /**
                         * 自動裁剪
                         **/
                        mCropBitmap = Bitmap.createBitmap(bitmap,
                                (int) (left * (float) bitmap.getWidth()),
                                (int) (top * (float) bitmap.getHeight()),
                                (int) ((right - left) * (float) bitmap.getWidth()),
                                (int) ((bottom - top) * (float) bitmap.getHeight()));

                        /**
                         * 手動裁剪
                         **/
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                //將裁剪區(qū)域設置成與掃描框一樣大
                                setCropLayout();
                                mCropImageView.setLayoutParams(new LinearLayout.LayoutParams(mIvCameraCrop.getWidth(), mIvCameraCrop.getHeight()));
                                mCropImageView.setImageBitmap( mCropBitmap);
                            }
                        });
                    }
                }).start();
                safeToTakePicture = true;
            }
        });
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • android app跳轉應用商店實現步驟

    android app跳轉應用商店實現步驟

    這篇文章主要為大家介紹了android app跳轉應用商店實現步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • android實現指紋識別功能

    android實現指紋識別功能

    這篇文章主要介紹了android指紋識別功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Android實現熄屏功能的示例代碼

    Android實現熄屏功能的示例代碼

    在某些特殊應用場景下,開發(fā)者可能需要通過軟件控制設備進行滅屏(關閉屏幕顯示),需要注意的是,Android系統(tǒng)出于安全和用戶體驗的考慮,并不允許應用隨意關閉屏幕,所以本文給大家介紹了Android實現滅屏功能,需要的朋友可以參考下
    2025-04-04
  • Android 實現全屏和無標題欄的顯示

    Android 實現全屏和無標題欄的顯示

    本篇文章主要介紹了Android 全屏顯示和無標題欄的方法,并附上代碼實例,和運行效果圖,有需要的朋友可以參考下
    2016-07-07
  • Android編程實現ListView滾動提示等待框功能示例

    Android編程實現ListView滾動提示等待框功能示例

    這篇文章主要介紹了Android編程實現ListView滾動提示等待框功能,結合實例形式分析了Android ListView滾動事件相關實現技巧,需要的朋友可以參考下
    2017-02-02
  • 手把手教你實現Android編譯期注解

    手把手教你實現Android編譯期注解

    今天給大家介紹Android編譯期注解sdk的步驟以及注意事項,并簡要分析了運行時注解以及字節(jié)碼技術在生成代碼上與編譯期注解的不同與優(yōu)劣,感興趣的朋友一起看看吧
    2021-07-07
  • Android4.1中BinderService用法實例分析

    Android4.1中BinderService用法實例分析

    這篇文章主要介紹了Android4.1中BinderService用法,以實例形式分析了Android4.1新增BinderService類的功能、原理及使用技巧,具有一定參考借鑒價值
    2015-10-10
  • Android 滑動小圓點ViewPager的兩種設置方法詳解流程

    Android 滑動小圓點ViewPager的兩種設置方法詳解流程

    Viewpager,視圖翻頁工具,提供了多頁面切換的效果。Android 3.0后引入的一個UI控件,位于v4包中。低版本使用需要導入v4包,現在我們一般不再兼容3.0及以下版本,另外使用Android studio開發(fā),默認導入v7包,v7包含了v4,所以不用導包,越來越方便了
    2021-11-11
  • Android數據加密之Des加密詳解

    Android數據加密之Des加密詳解

    DES是一種對稱加密算法,所謂對稱加密算法即:加密和解密使用相同密鑰的算法,這篇文章主要介紹了Android Des加密,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android HTTP網絡請求的異步實現

    Android HTTP網絡請求的異步實現

    這篇文章主要介紹了Android HTTP網絡請求的異步實現,感興趣的小伙伴們可以參考一下
    2016-07-07

最新評論

盈江县| 鄂州市| 南召县| 怀柔区| 项城市| 和平区| 高雄县| 天峨县| 济南市| 贵阳市| 新闻| 连江县| 衡阳市| 九龙坡区| 马公市| 砚山县| 涞源县| 柏乡县| 盐山县| 北流市| 大足县| 吕梁市| 安新县| 岳阳市| 前郭尔| 陇川县| 桐柏县| 朝阳市| 台南市| 特克斯县| 鹤庆县| 夏邑县| 江口县| 宁陵县| 色达县| 嘉鱼县| 吉林市| 定远县| 临潭县| 建瓯市| 武清区|