博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android项目 之 记事本(12) ----- 图片的等比例缩放及给图片加入边框
阅读量:6903 次
发布时间:2019-06-27

本文共 2547 字,大约阅读时间需要 8 分钟。

     
本文是自己学习所做笔记。欢迎转载,但请注明出处:

      在Android的UI开发中常常会遇到图片的缩放,就比方记事本,如今的图片都比較大,假设将原图不经缩放直接放在屏幕上,则会占满整个屏幕,并且有时图片会比屏幕还大,这时就不能全然的显示整个图片,所以。必需要进行缩放。但在缩放时,该怎样缩放呢。长和宽的缩放比例设置为多少合适呢。为了保持原图的纵横比,所以要最好的方法就是约束缩放比例,也就是等比例缩放,相信大家都用过PS中的缩放图片的功能。有个选项就是约束缩放比例,也就是保持纵横比。即等比例缩放。

     

                                       缩放前                                                                                 缩放后

     等比例的缩放思想非常easy,就是在缩放的过程中保持纵横比,代码例如以下:   

        //等比例缩放图片	private Bitmap resize(Bitmap bitmap,int S){		int imgWidth = bitmap.getWidth();		int imgHeight = bitmap.getHeight();		double partion = imgWidth*1.0/imgHeight;		double sqrtLength = Math.sqrt(partion*partion + 1);		//新的缩略图大小		double newImgW = S*(partion / sqrtLength);		double newImgH = S*(1 / sqrtLength);		float scaleW = (float) (newImgW/imgWidth);		float scaleH = (float) (newImgH/imgHeight);				Matrix mx = new Matrix();		//对原图片进行缩放		mx.postScale(scaleW, scaleH);		bitmap = Bitmap.createBitmap(bitmap, 0, 0, imgWidth, imgHeight, mx, true);		return bitmap;	}
     当中,S是长和宽缩放到的最大像素。

      今天再来实现一个给图片加入边框效果,当然了。这里我简单的加入了一个线条边框,也能够用其它好看的边框加在图片上,先看效果图:

       事实上,给图片加边框的思想。就是在图片的四周绘制一个矩形,代码例如以下:

        //给图片加边框,并返回边框后的图片	public Bitmap getBitmapHuaSeBianKuang(Bitmap bitmap) {        float frameSize = 0.2f;        Matrix matrix = new Matrix();         // 用来做底图        Bitmap bitmapbg = Bitmap.createBitmap(bitmap.getWidth(),                bitmap.getHeight(), Bitmap.Config.ARGB_8888);         // 设置底图为画布        Canvas canvas = new Canvas(bitmapbg);        canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG                | Paint.FILTER_BITMAP_FLAG));         float scale_x = (bitmap.getWidth() - 2 * frameSize - 2) * 1f                / (bitmap.getWidth());        float scale_y = (bitmap.getHeight() - 2 * frameSize - 2) * 1f                / (bitmap.getHeight());        matrix.reset();        matrix.postScale(scale_x, scale_y);         // 对相片大小处理(减去边框的大小)        bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),                bitmap.getHeight(), matrix, true);         Paint paint = new Paint();        paint.setColor(Color.WHITE);        paint.setStrokeWidth(1);        paint.setStyle(Style.FILL);         // 绘制底图边框        canvas.drawRect(                new Rect(0, 0, bitmapbg.getWidth(), bitmapbg.getHeight()),                paint);        // 绘制灰色边框        paint.setColor(Color.BLUE);        canvas.drawRect(                new Rect((int) (frameSize), (int) (frameSize), bitmapbg                        .getWidth() - (int) (frameSize), bitmapbg.getHeight()                        - (int) (frameSize)), paint);         canvas.drawBitmap(bitmap, frameSize + 1, frameSize + 1, paint);         return bitmapbg;	}
      

你可能感兴趣的文章
springboot+mybatis环境的坑和sql语句简化技巧
查看>>
Keil C编译器的变量存储分配
查看>>
非常不错的js 屏蔽类加验证类
查看>>
Innodb间隙锁,细节讲解(转)
查看>>
Apache安装
查看>>
C语言练习题库----数组
查看>>
nginx虚拟主机配置
查看>>
关于对char类型数据赋予负值的汇编表现
查看>>
润乾报表在proxool应用下的数据源配置
查看>>
Python基础23_os,sys,序列化,pickle,json
查看>>
python MVC、MTV 框架介绍 Django 模板系统常用语法
查看>>
Day06
查看>>
C语言结构体在内存中的存储情况探究------内存对齐
查看>>
wamp版本升级小问题记录
查看>>
去中心化
查看>>
win10安装MarkdownPad 2报错This view has crashed的处理及md简单语法
查看>>
Unity3D - 设计模式 - 工厂模式
查看>>
第二十六课:jQuery对事件对象的修复
查看>>
Leetcode题目:Swap Nodes in Pairs
查看>>
Windows聚焦转为图片
查看>>