图片二次采样

在安卓系统中,照片的大小是根据摄像头的分辨率而定的,一般是分辨率X4,就是照片的大。由于安卓系统中规定照片大小不能超过16M,因此,如果直接将照片存入内存,会造成OOM(内存溢出),故采用二次采样的方式对照片进行存储。

1.直接取系统已经压缩过的缩略图:

public class MainActivity extends AppCompatActivity {


    private ImageView imageView;
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView= (ImageView) findViewById(R.id.imageView);    

    }

//button的监听方法
    public void open(View v){

//打开系统相机
        Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent,0);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==0&&resultCode==RESULT_OK){
Bitmap bitmap=data.getParcelable("data);
            imageView.setImageBitmap(bitmap);
        }
    }
}

2.通过二次采样,二次采样的原理如下:

2.1.第一次,先取出图片的宽高,不取它的真实大小,因此bitmap是空的;

2.2.第二次,取出它的大小,并进行压缩处理。

代码:

public class MainActivity extends AppCompatActivity {

    private ImageView imageView;
    private File file;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView= (ImageView) findViewById(R.id.imageView);
        file=new File(Environment.getExternalStorageDirectory(),"text.jpg");
    }
    public void open(View v){
        Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
        startActivityForResult(intent,0);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==0&&resultCode==RESULT_OK){

            BitmapFactory.Options options = new BitmapFactory.Options();
//           第一次:设为true时,仅仅得到边界,即宽高
            options.inJustDecodeBounds=true;          
            Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(),options);

//      第二次:将options的值设为Config.RGB_565,会比默认的Config.ARGB_8888减少一半内存;
            options.inPreferredConfig= Bitmap.Config.RGB_565;

//
     将边框缩减到原来宽高的1/100;
            options.inSampleSize=Math.max(options.outWidth,options.outHeight)/100;

//
     设置为false,表示不仅仅加载边框,
            options.inJustDecodeBounds=false;
            bitmap=BitmapFactory.decodeFile(file.getAbsolutePath(),options);
            Toast.makeText(MainActivity.this, options.outWidth+"X"+options.outHeight, Toast.LENGTH_SHORT).show();
            imageView.setImageBitmap(bitmap);
        }
    }
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

这样,就OK了!


### 回答1: QCustomPlot 是一个基于Qt框架的图表绘制库,可以用于实现各种静态和动态的数据可视化。QCustomPlot的二次开发指的是在QCustomPlot的基础上进行定制化的开发,以满足特定的需求。 QCustomPlot提供了丰富的功能和灵活的接口,可以轻松地绘制各种类型的图表,如曲线图、柱状图、散点图等。它还支持自定义图表的外观和交互行为,包括调整坐标轴、添加标题和子标题、设置图表背景、绘制网格线等。 QCustomPlot的二次开发可以通过以下几个方面来实现。首先,可以根据项目要求自定义图表的外观,如修改颜色、线型和符号的样式,以及添加背景图片和阴影效果。其次,可以添加交互功能,如鼠标悬停提示、数据选择和缩放等,以提供更好的用户体验。 此外,QCustomPlot还支持动态更新图表,可以实时显示数据的变化情况。在二次开发中,可以利用这个功能实现实时数据的监控和展示。例如,在工业控制系统中,可以通过QCustomPlot将传感器数据可视化,实时呈现设备状态和变化趋势。 QCustomPlot还可以与Qt中的其他模块和类进行整合,以实现更复杂的功能。例如,可以使用Qt的网络模块从远程服务器获取数据,然后通过QCustomPlot进行绘制和展示。 综上所述,QCustomPlot的二次开发可以根据具体需求来增加、修改和定制图表的功能和外观,以实现更多样化和个性化的数据可视化效果。 ### 回答2: QCustomPlot是一个开源的Qt绘图库,它提供了一系列的绘图工具和功能,包括曲线绘制、图表绘制、坐标系设置等。在QCustomPlot中进行二次开发,可以根据自己的需求进行定制和扩展,增加特定的功能和样式。 QCustomPlot的二次开发可以从以下几个方面入手: 1. 数据源:可以通过二次开发,将不同的数据源与QCustomPlot结合起来。比如,可以从数据库、网络或其他文件中读取数据,并进行绘图展示。也可以通过实时数据更新的方式,将实时数据显示在曲线或图表上。 2. 绘图样式:QCustomPlot提供了一些默认的样式,但二次开发可以通过自定义样式来增加个性化的图表展示。可以调整线条的颜色、粗细、曲线的类型,修改图表的背景、坐标轴的标签、刻度等。 3. 交互功能:可以通过二次开发,添加一些交互式的功能。例如,可以实现放大缩小、平移、拖拽等操作,以便用户在绘图上进行交互。也可以添加工具栏、菜单等界面元素,提供更多的操作选项。 4. 数据处理:可以通过二次开发,在QCustomPlot上进行数据处理和分析。例如,可以对绘图数据进行滤波、平滑、峰值检测等操作,以便更好地展示和分析数据。 5. 导出和保存:可以通过二次开发,增加数据导出和保存的功能。可以将绘制的图表保存为图片,或者导出数据为文件,以方便用户进行后续的处理和使用。 通过以上的二次开发,可以根据具体需求定制化QCustomPlot,使其更加符合自己的项目要求。需要注意的是,在二次开发过程中,需要具备Qt和绘图相关的知识和经验,以便更好地理解和使用QCustomPlot库。 ### 回答3: QCustomPlot是一个非常强大的开源绘图库,可以用于绘制二维图形和图表。通过二次开发,我们可以根据自己的需求对其进行定制和扩展。 QCustomPlot的二次开发可以包括以下几个方面的内容: 1. 绘图定制:通过修改绘图函数、调整绘图参数等方式,可以实现各种各样的绘图效果。例如,可以改变线条颜色、线型、点的形状,添加背景图像或标签等。 2. 数据处理:可以通过二次开发,对绘图数据进行处理和分析。例如,可以实现数据滤波、数据采样、数据拟合等功能,从而在绘图时展示更加准确和精细的数据。 3. 交互功能:可以通过二次开发,添加交互式的功能,使用户能够与绘图进行互动。例如,可以添加鼠标拖动、缩放、平移等功能,使用户可以自由浏览和操作图形。 4. 扩展功能:QCustomPlot还可以通过二次开发,集成其他相关功能。例如,可以与其他界面库结合,实现更加丰富的用户界面;也可以与数据存储库结合,实现数据的保存和读取功能等。 总之,QCustomPlot的二次开发可以根据具体需求进行定制和扩展,从而实现更加个性化和强大的绘图功能。无论是改变绘图样式、处理数据、添加交互功能,还是集成其他功能,QCustomPlot都可以通过二次开发来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值