`
蓝月儿
  • 浏览: 49823 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

android 图片的缩放

阅读更多
//获得Bitmap的高和宽
int bmpWidth=bmp.getWidth();
int bmpHeight=bmp.getHeight();
 
//设置缩小比例
double scale=0.8;
//计算出这次要缩小的比例
scaleWidth=(float)(scaleWidth*scale);
scaleHeight=(float)(scaleHeight*scale);
 
//产生resize后的Bitmap对象
Matrix matrix=new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizeBmp=Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true);


转自
http://www.cnblogs.com/llm-android/archive/2012/02/19/2357821.html#commentform

图片处理的相关代码(忘了从哪儿转载的了,很感谢博主):

package com.wwj.sb.utils;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
/**
 * 图片工具类
 * @author wwj
 * 2013/7/3
 */
public class ImageUtil {
 /**图片的八个位置**/
 public static final int TOP = 0;	 //上
 public static final int BOTTOM = 1;	 //下
 public static final int LEFT = 2;	 //左
 public static final int RIGHT = 3;	 //右
 public static final int LEFT_TOP = 4;	 //左上
 public static final int LEFT_BOTTOM = 5;	//左下
 public static final int RIGHT_TOP = 6;	 //右上
 public static final int RIGHT_BOTTOM = 7;	//右下
 
 /**
  * 图像的放大缩小方法
  * @param src	 源位图对象
  * @param scaleX	宽度比例系数
  * @param scaleY	高度比例系数
  * @return 返回位图对象
  */
 public static Bitmap zoomBitmap(Bitmap src, float scaleX, float scaleY) {
  Matrix matrix = new Matrix();
  matrix.setScale(scaleX, scaleY);
  Bitmap t_bitmap = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true); 
  return t_bitmap;
 }
 
 /**
  * 图像放大缩小--根据宽度和高度
  * @param src
  * @param width
  * @param height
  * @return
  */
 public static Bitmap zoomBimtap(Bitmap src, int width, int height) {
  return Bitmap.createScaledBitmap(src, width, height, true);
 }
 
 /**
  * 将Drawable转为Bitmap对象
  * @param drawable
  * @return
  */
 public static Bitmap drawableToBitmap(Drawable drawable) {
  return ((BitmapDrawable)drawable).getBitmap();
 }
 
 
 /**
  * 将Bitmap转换为Drawable对象
  * @param bitmap
  * @return
  */
 public static Drawable bitmapToDrawable(Bitmap bitmap) {
  Drawable drawable = new BitmapDrawable(bitmap);
  return drawable;
 }
 
 /**
  * Bitmap转byte[]
  * @param bitmap
  * @return
  */
 public static byte[] bitmapToByte(Bitmap bitmap) {
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
  return out.toByteArray();
 }
 
 /**
  * byte[]转Bitmap
  * @param data
  * @return
  */
 public static Bitmap byteToBitmap(byte[] data) {
  if(data.length != 0) {
   return BitmapFactory.decodeByteArray(data, 0, data.length);
  }
  return null;
 }
 
 /**
  * 绘制带圆角的图像
  * @param src
  * @param radius
  * @return
  */
 public static Bitmap createRoundedCornerBitmap(Bitmap src, int radius) {
  final int w = src.getWidth();
  final int h = src.getHeight();
  // 高清量32位图
  Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);
  Paint paint = new Paint();
  Canvas canvas = new Canvas(bitmap);
  canvas.drawARGB(0, 0, 0, 0);
  paint.setColor(0xff424242);
  // 防止边缘的锯齿
  paint.setFilterBitmap(true);
  Rect rect = new Rect(0, 0, w, h);
  RectF rectf = new RectF(rect);
  // 绘制带圆角的矩形
  canvas.drawRoundRect(rectf, radius, radius, paint);
 
  // 取两层绘制交集,显示上层
  paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
  // 绘制图像
  canvas.drawBitmap(src, rect, rect, paint);
  return bitmap;
 }
 
 /**
  * 创建选中带提示图片
  * @param context
  * @param srcId
  * @param tipId
  * @return
  */
 public static Drawable createSelectedTip(Context context, int srcId, int tipId) {
  Bitmap src = BitmapFactory.decodeResource(context.getResources(), srcId);
  Bitmap tip = BitmapFactory.decodeResource(context.getResources(), tipId);
  final int w = src.getWidth();
  final int h = src.getHeight();
  Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);
  Paint paint = new Paint();
  Canvas canvas = new Canvas(bitmap);
  //绘制原图
  canvas.drawBitmap(src, 0, 0, paint);
  //绘制提示图片
  canvas.drawBitmap(tip, (w - tip.getWidth()), 0, paint);
  return bitmapToDrawable(bitmap);
 }
 
 /**
  * 带倒影的图像
  * @param src
  * @return
  */
 public static Bitmap createReflectionBitmap(Bitmap src) {
  // 两个图像间的空隙
  final int spacing = 4;
  final int w = src.getWidth();
  final int h = src.getHeight();
  // 绘制高质量32位图
  Bitmap bitmap = Bitmap.createBitmap(w, h + h / 2 + spacing, Config.ARGB_8888);
  // 创建燕X轴的倒影图像
  Matrix m = new Matrix();
  m.setScale(1, -1);
  Bitmap t_bitmap = Bitmap.createBitmap(src, 0, h / 2, w, h / 2, m, true);
 
  Canvas canvas = new Canvas(bitmap);
  Paint paint = new Paint();
  //	绘制原图像
  canvas.drawBitmap(src, 0, 0, paint);
  // 绘制倒影图像
  canvas.drawBitmap(t_bitmap, 0, h + spacing, paint);
  // 线性渲染-沿Y轴高到低渲染
  Shader shader = new LinearGradient(0, h + spacing, 0, h + spacing + h / 2, 0x70ffffff, 0x00ffffff, Shader.TileMode.MIRROR);
  paint.setShader(shader);
  // 取两层绘制交集,显示下层。
  paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
  // 绘制渲染倒影的矩形
  canvas.drawRect(0, h + spacing, w, h + h / 2 + spacing, paint);
  return bitmap;
 }
 
 
 /**
  * 独立的倒影图像
  * @param src
  * @return
  */
 public static Bitmap createReflectionBitmapForSingle(Bitmap src) {
  final int w = src.getWidth();
  final int h = src.getHeight();
  // 绘制高质量32位图
  Bitmap bitmap = Bitmap.createBitmap(w, h / 2, Config.ARGB_8888);
  // 创建沿X轴的倒影图像
  Matrix m = new Matrix();
  m.setScale(1, -1);
  Bitmap t_bitmap = Bitmap.createBitmap(src, 0, h / 2, w, h / 2, m, true);
  Canvas canvas = new Canvas(bitmap);
  Paint paint = new Paint();
  // 绘制倒影图像
  canvas.drawBitmap(t_bitmap, 0, 0, paint);
  // 线性渲染-沿Y轴高到低渲染
  Shader shader = new LinearGradient(0, 0, 0, h / 2, 0x70ffffff,
    0x00ffffff, Shader.TileMode.MIRROR);
  paint.setShader(shader);
  // 取两层绘制交集。显示下层。
  paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
  // 绘制渲染倒影的矩形
  canvas.drawRect(0, 0, w, h / 2, paint);
  return bitmap;
 }
 
 
 public static Bitmap createGreyBitmap(Bitmap src) {
  final int w = src.getWidth();
  final int h = src.getHeight();
  Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);
  Canvas canvas = new Canvas(bitmap);
  Paint paint = new Paint();
  // 颜色变换的矩阵
  ColorMatrix matrix = new ColorMatrix();
  // saturation 饱和度值,最小可设为0,此时对应的是灰度图;为1表示饱和度不变,设置大于1,就显示过饱和
  matrix.setSaturation(0);
  ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
  paint.setColorFilter(filter);
  canvas.drawBitmap(src, 0, 0, paint);
  return bitmap;
 }
 
 /**
  * 保存图片
  * @param src
  * @param filepath
  * @param format:[Bitmap.CompressFormat.PNG,Bitmap.CompressFormat.JPEG]
  * @return
  */
 public static boolean saveImage(Bitmap src, String filepath, CompressFormat format) {
  boolean rs = false;
  File file = new File(filepath);
  try {
   FileOutputStream out = new FileOutputStream(file);
   if(src.compress(format, 100, out)) {
    out.flush();	//写入流
   }
   out.close();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return rs;
 }
 
 /**
  * 添加水印效果
  * @param src	 源位图
  * @param watermark	水印
  * @param direction	方向
  * @param spacing 间距
  * @return
  */
 public static Bitmap createWatermark(Bitmap src, Bitmap watermark, int direction, int spacing) {
  final int w = src.getWidth();
  final int h = src.getHeight();
  Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);
  Canvas canvas = new Canvas(bitmap);
  canvas.drawBitmap(src, 0, 0, null);
  if(direction == LEFT_TOP) {
   canvas.drawBitmap(watermark, spacing, spacing, null);
  } else if(direction == LEFT_BOTTOM){
   canvas.drawBitmap(watermark, spacing, h - watermark.getHeight() - spacing, null);
  } else if(direction == RIGHT_TOP) {
   canvas.drawBitmap(watermark, w - watermark.getWidth() - spacing, spacing, null);
  } else if(direction == RIGHT_BOTTOM) {
   canvas.drawBitmap(watermark, w - watermark.getWidth() - spacing, h - watermark.getHeight() - spacing, null);
  }
  return bitmap;
 }
 
 
 /**
  * 合成图像
  * @param direction
  * @param bitmaps
  * @return
  */
 public static Bitmap composeBitmap(int direction, Bitmap... bitmaps) {
  if(bitmaps.length < 2) {
   return null;
  }
  Bitmap firstBitmap = bitmaps[0];
  for (int i = 0; i < bitmaps.length; i++) {
   firstBitmap = composeBitmap(firstBitmap, bitmaps[i], direction);
  }
  return firstBitmap;
 }
 /**
  * 合成两张图像
  * @param firstBitmap
  * @param secondBitmap
  * @param direction
  * @return
  */
 private static Bitmap composeBitmap(Bitmap firstBitmap, Bitmap secondBitmap,
   int direction) {
  if(firstBitmap == null) {
   return null;
  }
  if(secondBitmap == null) {
   return firstBitmap;
  }
  final int fw = firstBitmap.getWidth();
  final int fh = firstBitmap.getHeight();
  final int sw = secondBitmap.getWidth();
  final int sh = secondBitmap.getHeight();
  Bitmap bitmap = null;
  Canvas canvas = null;
  if(direction == TOP) {
   bitmap = Bitmap.createBitmap(sw > fw ? sw : fw, fh + sh, Config.ARGB_8888);
   canvas = new Canvas(bitmap);
   canvas.drawBitmap(secondBitmap, 0, 0, null);
   canvas.drawBitmap(firstBitmap, 0, sh, null);
  } else if(direction == BOTTOM) {
   bitmap = Bitmap.createBitmap(fw > sw ? fw : sw, fh + sh, Config.ARGB_8888);
   canvas = new Canvas(bitmap);
   canvas.drawBitmap(firstBitmap, 0, 0, null);
   canvas.drawBitmap(secondBitmap, 0, fh, null);
  } else if(direction == LEFT) {
   bitmap = Bitmap.createBitmap(fw + sw, sh > fh ? sh : fh, Config.ARGB_8888);
   canvas = new Canvas(bitmap);
   canvas.drawBitmap(secondBitmap, 0, 0, null);
   canvas.drawBitmap(firstBitmap, sw, 0, null);
  } else if(direction == RIGHT) {
   bitmap = Bitmap.createBitmap(fw + sw, fh > sh ? fh : sh,
     Config.ARGB_8888);
   canvas = new Canvas(bitmap);
   canvas.drawBitmap(firstBitmap, 0, 0, null);
   canvas.drawBitmap(secondBitmap, fw, 0, null);
  }
  return bitmap;
 }
 
 
}

分享到:
评论

相关推荐

    Android-一个Android图片缩放查看控件支持手势

    这个名为"Android-一个Android图片缩放查看控件支持手势"的项目,旨在提供一个自定义的视图控件,它允许用户通过手势进行图片的放大、缩小以及平移操作,提升用户体验。下面我们将深入探讨这个控件的关键知识点和...

    android 图片缩放

    总之,Android图片缩放涉及到多个技术点,包括Bitmap操作、ImageView的使用、手势识别、异步处理和性能优化。"ImageScale"这个示例项目为我们提供了一个实践这些概念的平台,通过学习和理解这个项目,开发者可以更好...

    Android图片缩放方法

    ### Android图片缩放方法详解 在Android开发过程中,图片处理是一项常见的需求,特别是在图片浏览器、社交媒体应用或任何涉及大量图像展示的场景下。对于优化用户体验和系统资源利用,有效地缩放图片至关重要。本文...

    android图片缩放放大

    这个"android图片缩放、放大demo"可能是提供了一个实际的项目实例,用于展示如何在Android应用程序中实现图片的动态调整大小。让我们深入探讨一下Android图片缩放放大的关键知识点。 1. **ImageView组件**: ...

    Android图片缩放动画Demo

    这个"Android图片缩放动画Demo"正是为了实现这样的功能而设计的。下面将详细解释其中涉及的关键知识点: 1. **ImageView的使用**: - `ImageView`是Android中展示图片的基础组件,可以加载本地或网络资源的图片。 ...

    android图片缩放双击旋转效果

    在Android开发中,实现图片的缩放、双击旋转以及拖动展示是一项常见的需求,尤其在设计用户界面或开发图像处理应用时。本教程将详细讲解如何在Android中实现这样的功能,主要涉及以下几个核心知识点: 1. **...

    PhotoView android 图片缩放浏览器

    在Android应用开发中,"PhotoView android 图片缩放浏览器"是一个专为查看和浏览图片设计的组件,它提供了丰富的交互功能,如手势缩放、平移等,提升了用户体验。这个项目主要依赖了三个核心组件和技术:Android-...

    Android图片缩放全功能

    "Android图片缩放全功能"这个主题涵盖了Android平台下对图片进行高效、灵活缩放的各种技术与策略。以下是对这个话题的详细阐述: 一、图片加载与显示 在Android中,我们通常使用`ImageView`来显示图片,但默认情况...

    android图片缩放

    ### Android图片缩放详解 #### 一、引言 在Android应用开发中,尤其是在涉及到大量图像展示的应用场景下,如图片浏览器、社交软件等,图片的处理与优化尤为重要。其中,图片缩放是一项非常基础且重要的功能。合理...

    android图片缩放源码

    android图片缩放源码,绝对好用,可以当类库使用

    android图片缩放,边界回弹,旋转,拖动,双击,单击,自动旋转摆正,图片居中显示

    总的来说,"android图片缩放,边界回弹,旋转,拖动,双击,单击,自动旋转摆正,图片居中显示"这一主题涵盖了Android开发中的许多核心技术,包括手势识别、图片处理、动画制作等,这些都是Android UI开发人员必须...

    android 图片缩放和多点触摸源码.rar

    本项目"android 图片缩放和多点触摸源码"正是针对这两个功能进行实现的示例,通过解析这个压缩包中的内容,我们可以学习到如何在Android应用中实现这些高级特性。 首先,让我们来看一下`PhotoView`。`PhotoView`是...

    Android实现图片缩放功能

    在Android开发中,图片缩放是一项常见的需求,特别是在ImageView组件中展示大图时,用户可能需要通过手势来放大或缩小图片以查看细节。本篇将详细介绍如何在Android中实现图片的缩放功能,特别是利用ImageView结合...

    android 图片缩放 多点缩放

    在Android开发中,图片缩放和多点触控缩放是一项常见的需求,特别是在设计用户界面时,例如在ImageView中展示图像。本节将详细讲解如何实现Android中的图片自由缩放,以及支持多点触控的缩放功能。 一、图片缩放...

    Android图片裁剪----移动、缩放图片进行裁剪

    总之,Android图片裁剪涉及多个方面,包括图像处理、手势识别和UI交互。通过掌握这些技术,开发者能够创建功能丰富的图片编辑应用,提升用户体验。在实际开发中,还需要考虑性能优化和兼容性问题,以确保应用在不同...

    Android中进行图片缩放显示

    Android中进行图片缩放显示,获取网络图片,双击放大缩小,支持多点触屏缩放和拖拽。 demo查看地址:http://blog.csdn.net/u011084603/article/details/50371843

    Android实现图片手势缩放、移动、双击放大缩小

    Android实现图片手势缩放、移动、双击放大缩小。

    android 图片缩放移动

    本文将详细讲解如何实现Android中的图片缩放和移动功能,并结合提供的文件"网络获取图片-进行缩放.txt"和"DragImageView"进行深入探讨。 首先,我们需要了解Android中的图像处理基础。在Android中,我们通常使用`...

    Android GridView 图片缩放

    在"Android GridView 图片缩放"这个主题中,我们将深入探讨如何在GridView中实现图片点击后放大显示的功能,这在创建类似相册的应用或者需要用户查看详细图像的场景下非常实用。 首先,我们需要理解GridView的基本...

Global site tag (gtag.js) - Google Analytics