Android 그림 감상(그림 읽기를 Bitmap 변환, 로컬 저장, 샘플링 압축)

1. 권한
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

2. 그림을 Bitmap의 첫 번째 종류로 전환: 프로젝트 Resources의 그림 Bitmap으로 돌아가기
//            bitmap
    private Bitmap imgToBitmap(){
        Bitmap  bitmap = BitmapFactory.decodeResource(this.getApplication().getResources(), R.mipmap.imgbitmapio);
        return bitmap;
    }

두 번째: 로컬에서 그림 가져오기 (SAVE REAL PATH+ "testImage/chen.jpeg"로컬 그림 경로입니다)
    private Bitmap imgToBitmap(){
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(SAVE_REAL_PATH+"testImage/chen.jpeg");
        } catch (FileNotFoundException e) {

        }
        Bitmap bitmap  = BitmapFactory.decodeStream(fis);
        return bitmap;
    }

3. Bitmap을 byte 배열로 변환
 public static byte[] BitmapBytes(Bitmap bm){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
        return baos.toByteArray();
    }

4. 샘플링 압축 사진의 압축 비례가 클수록 압축도가 높다(size=4시 메모리는 10배 절약할 수 있고 선명도 차이가 많지 않다)
public Bitmap getScaleBitmap(byte[] data,int size)
    {
        //1,                
        BitmapFactory.Options options = new BitmapFactory.Options();

        //2,     
        options.inJustDecodeBounds = true;

        //3,       
        BitmapFactory.decodeByteArray(data, 0, data.length, options);


        //4,        ,       1 ,     ,         
        //   2        2 -- > 2,3 ;   4   8   4   
        options.inSampleSize = size;

        //5,          RGB_565
        options.inPreferredConfig = Bitmap.Config.RGB_565;

        //6,      
        options.inJustDecodeBounds = false;

        //7,       ,       
        Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options);

        return bitmap;

    }

5. 그림을 로컬에 저장
//    
private static final String SAVE_PIC_PATH=Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)
            ? Environment.getExternalStorageDirectory().getAbsolutePath() : "/mnt/sdcard/chenxh/mytestApp";//  sd 
    private static final String SAVE_REAL_PATH = SAVE_PIC_PATH+  "/res/chenchen";//    


 //         
    public static void saveImage(Bitmap bm, String fileName, String path) throws IOException {
        String subForder = SAVE_REAL_PATH + path;
        File foder = new File(subForder);
        if (!foder.exists()) {
            foder.mkdirs();
        }
        File myCaptureFile = new File(subForder, fileName);
        if (!myCaptureFile.exists()) {
            myCaptureFile.createNewFile();
        }
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
        bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
        bos.flush();
        bos.close();
    }

6. 실행
try {
                    createFolder();
                    Bitmap bitmap1 = imgToBitmap();
                    saveImage(getScaleBitmap( BitmapBytes(bitmap1),4),"chen123.jpeg","/testImage");
                } catch (IOException e) {

                }

좋은 웹페이지 즐겨찾기