zoukankan      html  css  js  c++  java
  • android项目 之 记事本(12) ----- 图片的等比例缩放及给图片加入边框

          本文是自己学习所做笔记。欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020

          在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;
    	}
          

  • 相关阅读:
    动态显示隐藏的kindeditor 编辑器,如何获取焦点
    BT修改默认端口
    fa内容重复度检测
    fa后台总是提示 未知的数据格式,以及调试方法大全
    vscode这种界面是怎么回事?我丢你楼某
    腾讯云服务器,安装BT面板
    fastadmin编辑器配置,类比wangeditor
    fastadmin 安装过插件以后,原始插件的文件能不能删除?
    leetcode——65. 有效数字
    leetcode——8. 字符串转换整数 (atoi)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5184198.html
Copyright © 2011-2022 走看看