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

原文地址:https://www.cnblogs.com/zfyouxi/p/5184198.html