本文是自己学习所做笔记。欢迎转载,但请注明出处: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;
}

android项目 之 记事本(12) ----- 图片的等比例缩放及给图片加入边框的更多相关文章

  1. android项目 之 记事本(13) ----- 查看图片及播放录音

    本文是自己学习所做笔记,欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 今天就来实现下查看图片及录音的功能,在编辑或者浏览记事时,点击图片.打开一个自己 ...

  2. js实现图片的等比例缩放

      js实现图片的等比例缩放 CreateTime--2018年3月6日14:04:18 Author:Marydon 1.代码展示 /** * 图片按宽高比例进行自动缩放 * @param ImgO ...

  3. css技术之用最高和最宽的限制“max-height和max-width”做图片同比例缩放,达到图片不变形目的,做出批量打印图片功能,页面打印“window.print()”

    一.简介 他们是为流而生的,像width/height这种定死的砖头式布局,min-width/max-width就没有存在的意义 ,min-width/max-width一定是自适应布局或流体布局中 ...

  4. android项目 之 记事本(11) ----- 加入数据库

    本文是自己学习所做笔记.欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 通过之前的10节,已实现了记事本的大部分功能,有加入拍照.加入照片,加入录音,加 ...

  5. 如何在使用eclipse的情况下,清理android项目中的冗余class文件和资源文件以及冗余图片

    在我们迭代项目的过程中,经常会启用某些功能,或者修改某些界面的问题,那么问题来了,这样很容易出现大量的冗余.java文件,冗余资源文件,一些冗余的界面文件等.那么问题既然出现了,那么如何去解决呢,这就 ...

  6. CSS实现图片快速等比例缩放,效果佳

    初学者在实现图片等比例缩放,通常会使用js编写逻辑来控制高或宽,达到自动缩放的效果. 这里提供一种纯CSS的图片缩放功能,请看代码: <style type="text/css&quo ...

  7. Qt图片按原比例缩放

    1.选择图片 QString strFilePath = QFileDialog::getOpenFileName(this, tr("Select file"), QStanda ...

  8. wpf图片浏览器,实现缩放平移操作图片切换等功能

    wpf经常要用到控件来查看图片,尤其是高清图片,于是做了一个例子: 1.定义图片的队列,用list来存. private readonly List<string> files; 2.切换 ...

  9. java读取jpg图片旋转按比例缩放

    //入口 public static BufferedImage constructHeatWheelView(int pageWidth, int pageHeight, DoubleHolder ...

随机推荐

  1. Javascript 学习笔记 无缝滚动

    效果 : 鼠标移入图片 停止滚动, 鼠标移出自动滚动 可以调整向左或右方向滚动 <style type="text/css"> * { margin:; padding ...

  2. linux 程序运行监控

    一 . 使用supervise 是daemon-tools 的一个功能,系统的守护进程.在进程挂掉的时候可以自动重启. 二   安装 wget http://cr.yp.to/daemontools/ ...

  3. spoj COT2 - Count on a tree II 树上莫队

    题目链接 http://codeforces.com/blog/entry/43230树上莫队从这里学的,  受益匪浅.. #include <iostream> #include < ...

  4. 解决ArcSDE图层名被占用的问题

    点击文章查看 当你发现上面那篇文章时你已经接近成功了,但还差最后一步! <!- -delete   from sde.GDB_OBJECTCLASSES where NAME = upper(' ...

  5. cf-A. Wet Shark and Odd and Even(水)

    A. Wet Shark and Odd and Even time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  6. SRM 584 div2

    早早地水完了三道题,pt1000用的是dfs,开始做的时候误认为复杂度最多就O(2^25),结果被一组O(2*3^16)的数据接近1e8给cha了.继续努力. pt250:求两个串的前缀组成的不同串数 ...

  7. ObjectiveC中的block用法解析

    Block Apple 在C, Objective-C,C++加上Block这个延申用法.目前只有Mac 10.6 和iOS 4有支持.Block是由一堆可执行的程序组成,也可以称做没有名字的Func ...

  8. k8s 集群基本概念

    一.概述: kubernetes是google开源的容器集群管理系统,提供应用部署.维护.扩展机制等功能,利用kubernetes能方便管理跨集群运行容器化的应用,简称:k8s(k与s之间有8个字母) ...

  9. 使用window.postMessage实现跨域通信

    JavaScript由于同源策略的限制,跨域通信一直是棘手的问题.当然解决方案也有很多: document.domain+iframe的设置,应用于主域相同而子域不同: 利用iframe和locati ...

  10. Ext.Net 使用总结之GridPanel中的选中行

    1.判断GridPanel中是否选中了某行 if (!GridPanel1.hasSelection()) { Ext.Msg.alert("提示", "请选择记录!&q ...