哈哈 在项目中看了些别人的图片缩放类,放出代码 以后用
/*
* Copyright (C) 2010 Aspire
*
* CommonUtil.java Version 1.0
*
*/
package com.mid.market.util;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Random;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.PathShape;
import android.graphics.drawable.shapes.Shape;
/**
* @author x_liyajun
*
* 2010-10-24 ����10:40:46
*
* ImageUtil
*
*/
public class ImageUtil {
private static final float PHOTO_BORDER_WIDTH = 3.0f;
private static final int PHOTO_BORDER_COLOR = 0xffffffff;
private static final float ROTATION_ANGLE_MIN = 2.5f;
private static final float ROTATION_ANGLE_EXTRA = 5.5f;
public static final String SDCARD_DIR="/sdcard/mid/";
private static final Random sRandom = new Random();
private static final Paint sPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
private static final Paint sStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
static {
sStrokePaint.setStrokeWidth(PHOTO_BORDER_WIDTH);
sStrokePaint.setStyle(Paint.Style.STROKE);
sStrokePaint.setColor(PHOTO_BORDER_COLOR);
}
/**
* 图片缩放
* @param bitmap
* @param width
* @param height
* @return
*/
public static Bitmap scaleAndFrame(Bitmap bitmap, int width, int height) {
final int bitmapWidth = bitmap.getWidth();
final int bitmapHeight = bitmap.getHeight();
final float scale = Math.min((float) width / (float) bitmapWidth,
(float) height / (float) bitmapHeight);
final int scaledWidth = (int) (bitmapWidth * scale);
final int scaledHeight = (int) (bitmapHeight * scale);
final Bitmap decored = Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, true);
final Canvas canvas = new Canvas(decored);
final int offset = (int) (PHOTO_BORDER_WIDTH / 2);
sStrokePaint.setAntiAlias(false);
canvas.drawRect(offset, offset, scaledWidth - offset - 1,
scaledHeight - offset - 1, sStrokePaint);
sStrokePaint.setAntiAlias(true);
return decored;
}
/**
* 图片旋转
* @param bitmap
* @return
*/
public static Bitmap rotateAndFrame(Bitmap bitmap) {
final boolean positive = sRandom.nextFloat() >= 0.5f;
final float angle = (ROTATION_ANGLE_MIN + sRandom.nextFloat() * ROTATION_ANGLE_EXTRA) *
(positive ? 1.0f : -1.0f);
final double radAngle = Math.toRadians(angle);
final int bitmapWidth = bitmap.getWidth();
final int bitmapHeight = bitmap.getHeight();
final double cosAngle = Math.abs(Math.cos(radAngle));
final double sinAngle = Math.abs(Math.sin(radAngle));
final int strokedWidth = (int) (bitmapWidth + 2 * PHOTO_BORDER_WIDTH);
final int strokedHeight = (int) (bitmapHeight + 2 * PHOTO_BORDER_WIDTH);
final int width = (int) (strokedHeight * sinAngle + strokedWidth * cosAngle);
final int height = (int) (strokedWidth * sinAngle + strokedHeight * cosAngle);
final float x = (width - bitmapWidth) / 2.0f;
final float y = (height - bitmapHeight) / 2.0f;
final Bitmap decored = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(decored);
canvas.rotate(angle, width / 2.0f, height / 2.0f);
canvas.drawBitmap(bitmap, x, y, sPaint);
canvas.drawRect(x, y, x + bitmapWidth, y + bitmapHeight, sStrokePaint);
return decored;
}
/**
* 从图片文件中读取图片,并返回缩略图
* @param fileName
* @param width 缩放图片的宽度
* @param height 高度
* @return
*/
public static Bitmap getSamlBitmapFromFill(String fileName,int width, int height){
if(fileName.split("/").length<=1){
fileName =SDCARD_DIR+fileName;
}
Bitmap srcBitmap = BitmapFactory.decodeFile(fileName);
if(srcBitmap==null){
return null;
}
Bitmap destBitmap = scaleAndFrame(srcBitmap,width,height);
return destBitmap;
}
public static Bitmap genStar(int count){
return null;
}
public static Drawable getDrawable(String name) {
Drawable d = null;
FileInputStream fis = null;
String fileName = FileUtils.newFileName(name, "png");
if (!FileUtils.isExists(fileName)) {
return null;
}
try {
fis = new FileInputStream(fileName);
d = Drawable.createFromStream(fis, name);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
fis = null;
}
}
return d;
}
// public static Shape createPentacle(double sx,double sy,double radius,double theta){
// final float arc = (float) (Math.PI/5);
// final float rad = (float) (Math.sin(Math.PI/10)/Math.sin(3*Math.PI/10));
// Path path = new Path();
// path.moveTo(1,0);
// for(int idx = 0;idx < 5;idx ++){
// path.lineTo((float)(rad*Math.cos((1+2*idx)*arc)),(float)(rad*Math.sin((1+2*idx)*arc)));
//
// path.lineTo((float)(Math.cos(2*(idx+1)*arc)),(float)(Math.sin(2*(idx+1)*arc)));
// }
// path.close();
// ShapeDrawable mDrawable = new ShapeDrawable(new PathShape(path, 250, 250));
// mDrawable.getPaint().setColor(Color.YELLOW);
// return atf.createTransformedShape(path);
// }
}
分享到:
相关推荐
本主题将深入探讨如何利用强大的图片加载类来实现高效、流畅的图库效果,并结合Handler这一Android消息处理机制进行详细操作案例分析。 1. **图片加载库的选择** Android开发中有多种图片加载库可供选择,如...
在Android开发中,图片处理是一项常见的任务,尤其是在网络通信、数据存储或用户界面展示时。本文将详细讨论如何使用基于base64的图片处理工具...理解并熟练运用这些工具类,能够帮助你更高效地进行Android应用的开发。
这个名为"Android 通用 帮助类"的资源很可能是一个开源项目,它包含了Android开发中常用的工具方法,如文件操作、图片处理等。现在我们来详细探讨一下这些关键知识点。 1. **文件操作**: - 文件读写:Android系统...
本教程将详细讲解如何创建一个兼容Android7.0的图片选择工具类,帮助开发者解决这些问题。 首先,理解Android7.0的系统变化至关重要。在Android7.0(API级别24)中,主要的更新包括多窗口模式、快速回复、通知通道...
这个名为"Android-一个Android图片缩放查看控件支持手势"的项目,旨在提供一个自定义的视图控件,它允许用户通过手势进行图片的放大、缩小以及平移操作,提升用户体验。下面我们将深入探讨这个控件的关键知识点和...
本项目“android图片缓存有关的项目”旨在帮助开发者深入理解图片缓存的原理,并提供实践操作的机会。下面我们将详细探讨图片缓存的相关知识点。 1. 图片缓存的作用: - 减轻网络负载:通过缓存已下载的图片,避免...
2. **Android 图片切换库**:Android 开发中有许多现成的库可以帮助开发者实现图片切换特效,如 Glide、Picasso 和 Fresco,它们不仅支持图片加载,还提供了简单的过渡动画。 3. **自定义动画**:Android 提供了 ...
下面我们将深入探讨Android图片处理的相关知识点。 1. **图片加载框架**: Android原生的Bitmap类提供了基本的图片处理功能,但在实际应用中,由于内存管理的复杂性,往往需要使用专门的图片加载库,如Glide、...
本篇将深入探讨Android图片处理工具的相关知识点,帮助开发者更好地理解和运用这些工具。 首先,Android SDK本身提供了基本的图片处理能力,例如Bitmap类,它是Android中处理图像的基础。Bitmap可以用来加载、创建...
总的来说,实现Android图片凸出效果需要对Android图形系统有深入理解,包括Canvas的绘图方法、Matrix的变换以及动画的原理。通过自定义View或利用现有库,开发者可以创造出富有创意和吸引力的UI元素,提升应用的整体...
这个“android图片浏览器代码”提供的解决方案是针对大图片加载的问题,这是一个棘手的问题,因为大图片可能会导致内存溢出,影响应用的性能和用户体验。以下是对这个代码库的详细解析: 1. **大图片加载策略**: ...
这份"Android图片处理资料"很可能是关于Android平台上的图像处理技术的深入探讨,可能包括源码分析和相关工具的使用。虽然描述中没有提供具体信息,但我们可以从标题和标签中推测出一些可能涵盖的关键知识点。 1. *...
这两个类可以帮助我们识别用户的捏合和滑动操作,从而实现图片的放大和缩小以及平移。 ```java public class CustomImageView extends ImageView { private ScaleGestureDetector scaleGestureDetector; public ...
总的来说,这个项目涵盖了Android图片处理的核心技术,包括加密解密的安全性,以及图片切割的灵活性。对于Android开发者而言,理解并掌握这些技术对于提升应用的安全性和功能性都有很大帮助。通过源码学习,可以深入...
在Android平台上,保护用户的隐私数据,尤其是敏感的图片信息,是一项重要的任务。本文将深入探讨如何实现Android...`MyPhotoEncryptDemo`项目提供了一个很好的起点,可以帮助你深入理解和实践Android图片加密技术。
3. **使用第三方工具**:有些第三方工具,如Android Asset Studio或APK反编译工具,可以帮助开发者直观地浏览和搜索`android.R.drawable`中的资源。 了解`android.R.drawable`中的图片资源对于优化应用的UI设计和...
总之,"Android图片素材集锦"是一个宝贵的资源库,它可以帮助开发者轻松地获取并应用各种图片素材,以打造出独具特色的Android应用。在使用过程中,开发者不仅要关注素材的质量和多样性,还要注意资源的合理使用和...
这个"android图片缩放、放大demo"可能是提供了一个实际的项目实例,用于展示如何在Android应用程序中实现图片的动态调整大小。让我们深入探讨一下Android图片缩放放大的关键知识点。 1. **ImageView组件**: ...
【Android-iOS图片裁剪工具类】是一种跨平台的图像处理技术,主要应用于移动设备上的应用程序,如Android和iOS。这种工具类库通常提供了一系列功能,使得开发者能够方便地实现图片的选择、裁剪、旋转以及调整等操作...
在Android上,有许多优秀的图片加载库可以帮助我们高效地加载图片,如Glide、Picasso、Fresco等。这里推荐使用Glide,它具有内存管理、缓存策略和强大的图片处理能力。首先,在项目中添加Glide的依赖: ```groovy...