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

    上例子 1.首先要用php创建cookie发送给客户端,利用setcookie()方法即可 <?php /* * * @Authors peng--jun * @Email 1098325951 ...

  2. getElementByID、getElementsByName、getElementsByTagName实例详解

    getElementByID.getElementsByName.getElementsByTagName实例详解 本文通过实例,详细介绍了getElementByID.getElementsByNa ...

  3. C#学习日志 day10 -------------- problem statement

    Revision History Date Issue Description Author 15/May/2015 1.0 Finish most of the designed function. ...

  4. chrome调试ajax

    network可以查看ajax的信息.非常的实用.

  5. Linux(ubuntu)使用dd从iso制作win7安装u盘(读卡器一样),以及备份分区

    转自我的独立博客:alanslab.cn 先吐个槽,早知道windows越用越慢,没想到太久不用还会坏... 昨天就遇到了这样一件事,电脑的光驱早拆了换硬盘托架了,只好翻出来以前手机的sd卡开刀,网上 ...

  6. poj2163

    #include <stdio.h> #include <stdlib.h> int main() { ; ]; scanf("%d %d %d",& ...

  7. Servlet的运行方式

    通常我们运行servlet需要在web.xml配置文件中,注册我们写好的servlet以及其对应的访问路径. 在学习web开发中,有一种不需要配置便可以直接对servlet进行配置的方式,在web.x ...

  8. Matrix(多线程dp)

    Matrix Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  9. Swift利用闭包(closure)来实现传值-->前后两个控制器的反向传值

    一.第一个界面 // Created by 秦志伟 on 14-6-13. import UIKit class ZWRootViewController: UIViewController { in ...

  10. 关于Apacheserver的訪问控制

    Apache的訪问控制指对不论什么资源的不论什么方式的訪问控制. 一.基于主机或者IP地址的控制 这样的訪问控制基于訪问者的主机名或者IP地址,通过使用 Deny 和 Allow 指令.实现同意或者禁 ...