2 zxd 72 zxd_72 于 2013.08.21 16:05 提问

Android –压缩 bitmap 再保存到 SDCARD

我想实现的是:拍照片,然后压缩成 png(保持原来的尺寸),然后保存到sdCard中,我为什么要这样做呢,因为我需要重新压缩,然后用Base64编码,我就可以把它发送到一个服务器中。
现在的问题是:

1.文件太大
2.内存耗尽
3.不确定这样做对不对

@Override
    public void onClick(View button) {
        switch (button.getId()) {
        case R.id.cameraButton:

            Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,
                    Uri.fromFile(new File("/sdcard/test.png")));
            startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

            break;
        case R.id.galleryButton:

            sendToDatabase();
            break;
        }

    }

    // Camera on activity for result - save it as a bmp and place in imageview
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_PIC_REQUEST) {
            // do something
        }

        if (resultCode == Activity.RESULT_OK) {
            Log.d(TAG, "result ok");

            picture = BitmapFactory.decodeFile("/sdcard/test.png");

            // Create string to place it in sd card
            String extStorageDirectory = Environment
                    .getExternalStorageDirectory().toString();
            //create output stream
            OutputStream outputStream = null;
            //create file
            File file = new File(extStorageDirectory, "test.png");
            try {
                outputStream = new FileOutputStream(file);
                picture.compress(Bitmap.CompressFormat.PNG, 80, outputStream);
                //picture.recycle();
                outputStream.flush();
                outputStream.close();
            } catch (IOException e){
                Log.d(TAG, "ERROR");
            }

            imageView.setImageBitmap(picture);

        }
    }

    public void sendToDatabase() {

        InputStream inputStream = null;

        //get the picture from location
        picture = BitmapFactory.decodeFile("/sdcard/test.png");

        // CONVERT:
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        Boolean didItWork = picture.compress(Bitmap.CompressFormat.PNG, 50,
                outStream);
        picture.recycle();
        if (didItWork = true) {
            Log.d(TAG, "compression worked");
        }
        Log.d(TAG, "AFTER. Height: " + picture.getHeight() + " Width: "
                + picture.getWidth());
        final byte[] ba = outStream.toByteArray();
        try {
            outStream.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
获取不经过压缩的图片,本地保存压缩
首先启动相机调用改方法 /** * 启动拍照 */ public void startCamera() { try { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //将图片保存至SDcard,相机返回后直接在SDcard读取图片,这样可以解决获取的图片太小的问题。
bitmap压缩后保存到本地(只压缩质量,不压缩像素)
bitmap压缩后保存到本地(只压缩质量,不压缩像素): public static void compressBmpToFile(Bitmap bmp,File file){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); int options = 80; bmp.com
android 保存bitmap到SD卡
android 保存bitmap到SD卡 /** * 保存bitmap到SD卡 * @param bitName 保存的名字 * @param mBitmap 图片对像 * return 生成压缩图片后的图片路径 */ @SuppressLint("SdCardPath") public static String saveMyB
大图片压缩后,保存小图片到本地
目的:从本地path中获取bitmap,压缩后保存小图片到本地 涉及到的知识点: 根据ImageView获取适当的压缩的宽和高,尽可能得到ImageView的精确的宽高 通过反射获取imageview的某个属性值 根据图片要显示的宽和高,对图片进行压缩,避免OOM 根据需求的宽和高以及图片实际的宽和高计算SampleSize package com.example
Android笔记:保存Bitmap到SD卡中
Bitmap保存到SD卡中
Android压缩图片并且保存到本地内存卡中
亲爱的同学们,相信我们在软件开发中经常会遇到拍照,选择相册上传的功能。前几天遇到一个这样的一个问题。后台要求我上传的图片不能超过500KB,大家知道我们现在的智能手机像素越来越高,拍照的照片一般都是几兆甚至一二十兆。那么我们改怎么做呢,答案是一定的,那就是先进行压缩,然后在保存压缩后的图片上传。最近在网络上也搜索到了很多关于压缩的内容,相信大家会有和我同感,为什么都写的不清楚,或许我们可以实现我们
Android全屏截图的方法,返回Bitmap并且保存在SD卡上
Android全屏截图的方法,返回Bitmap并且保存在SD卡上 今天做分享,需求是截图分享,做了也是一个运动类的产品,那好,我们就直接开始做,考虑了一下,因为是全屏的分享,所有很自然而然的想到了View的getDrawingCache()方法来获取Bitmap,看到网上有人说截取不了WebView上的图片,倒是没有去尝试,因为我们的应用不需要,不过有时间还是要去试试,占占坑,这篇博客只是记录一
Android 玩转图片(读取图片转化Bitmap,保存本地,采样压缩)
1、权限 uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 2、将图片转化为Bitmap 第一种:返回项目Resources中图片
Android数据存储:获取网络图片把图片保存到SD卡中并从SDk卡中读取(通过Bitmap方法)
1、把从布局中获得的图片保存到SD卡中,并把图片在从SD卡中读取出来 2、从网络上获取一张图片的地址,把图片保存到SD卡中,并把网络图片读取出来   程序代码: package com.example.administrator.jreduch08; import android.graphics.Bitmap; import android.graphics.BitmapFactory
android开发将Bitmap转换成图片保存到sd卡
public void saveMyBitmap(Bitmap mBitmap,String bitName)  {         File f = new File( "/sdcard/Note/"+bitName + ".jpg");         FileOutputStream fOut = null;         try {                 fOut =