`
ouyangfeng521
  • 浏览: 248831 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

android 图片相关帮助类

阅读更多

哈哈 在项目中看了些别人的图片缩放类,放出代码 以后用

 

/*
 * 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);
//   } 


}
 
分享到:
评论

相关推荐

    Android 图片加载类 图库效果

    本主题将深入探讨如何利用强大的图片加载类来实现高效、流畅的图库效果,并结合Handler这一Android消息处理机制进行详细操作案例分析。 1. **图片加载库的选择** Android开发中有多种图片加载库可供选择,如...

    Android图片处理工具类

    在Android开发中,图片处理是一项常见的任务,尤其是在网络通信、数据存储或用户界面展示时。本文将详细讨论如何使用基于base64的图片处理工具...理解并熟练运用这些工具类,能够帮助你更高效地进行Android应用的开发。

    Android 通用 帮助类

    这个名为"Android 通用 帮助类"的资源很可能是一个开源项目,它包含了Android开发中常用的工具方法,如文件操作、图片处理等。现在我们来详细探讨一下这些关键知识点。 1. **文件操作**: - 文件读写:Android系统...

    兼容Android7.0的图片选择工具类

    本教程将详细讲解如何创建一个兼容Android7.0的图片选择工具类,帮助开发者解决这些问题。 首先,理解Android7.0的系统变化至关重要。在Android7.0(API级别24)中,主要的更新包括多窗口模式、快速回复、通知通道...

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

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

    android图片缓存有关的项目

    本项目“android图片缓存有关的项目”旨在帮助开发者深入理解图片缓存的原理,并提供实践操作的机会。下面我们将详细探讨图片缓存的相关知识点。 1. 图片缓存的作用: - 减轻网络负载:通过缓存已下载的图片,避免...

    android150种图片切换特效

    2. **Android 图片切换库**:Android 开发中有许多现成的库可以帮助开发者实现图片切换特效,如 Glide、Picasso 和 Fresco,它们不仅支持图片加载,还提供了简单的过渡动画。 3. **自定义动画**:Android 提供了 ...

    Android图片处理源码

    下面我们将深入探讨Android图片处理的相关知识点。 1. **图片加载框架**: Android原生的Bitmap类提供了基本的图片处理功能,但在实际应用中,由于内存管理的复杂性,往往需要使用专门的图片加载库,如Glide、...

    android图片处理工具

    本篇将深入探讨Android图片处理工具的相关知识点,帮助开发者更好地理解和运用这些工具。 首先,Android SDK本身提供了基本的图片处理能力,例如Bitmap类,它是Android中处理图像的基础。Bitmap可以用来加载、创建...

    android图片凸出效果

    总的来说,实现Android图片凸出效果需要对Android图形系统有深入理解,包括Canvas的绘图方法、Matrix的变换以及动画的原理。通过自定义View或利用现有库,开发者可以创造出富有创意和吸引力的UI元素,提升应用的整体...

    android图片浏览器代码

    这个“android图片浏览器代码”提供的解决方案是针对大图片加载的问题,这是一个棘手的问题,因为大图片可能会导致内存溢出,影响应用的性能和用户体验。以下是对这个代码库的详细解析: 1. **大图片加载策略**: ...

    Android图片处理资料

    这份"Android图片处理资料"很可能是关于Android平台上的图像处理技术的深入探讨,可能包括源码分析和相关工具的使用。虽然描述中没有提供具体信息,但我们可以从标题和标签中推测出一些可能涵盖的关键知识点。 1. *...

    Android 图片浏览全屏缩放

    这两个类可以帮助我们识别用户的捏合和滑动操作,从而实现图片的放大和缩小以及平移。 ```java public class CustomImageView extends ImageView { private ScaleGestureDetector scaleGestureDetector; public ...

    Android图片加密、解密、切割(源码)

    总的来说,这个项目涵盖了Android图片处理的核心技术,包括加密解密的安全性,以及图片切割的灵活性。对于Android开发者而言,理解并掌握这些技术对于提升应用的安全性和功能性都有很大帮助。通过源码学习,可以深入...

    最全的android图片加密

    在Android平台上,保护用户的隐私数据,尤其是敏感的图片信息,是一项重要的任务。本文将深入探讨如何实现Android...`MyPhotoEncryptDemo`项目提供了一个很好的起点,可以帮助你深入理解和实践Android图片加密技术。

    android资源图片浏览,系统图片,android.R.drawable浏览,查看系统图片,查看android自带图片

    3. **使用第三方工具**:有些第三方工具,如Android Asset Studio或APK反编译工具,可以帮助开发者直观地浏览和搜索`android.R.drawable`中的资源。 了解`android.R.drawable`中的图片资源对于优化应用的UI设计和...

    Android图片素材集锦

    总之,"Android图片素材集锦"是一个宝贵的资源库,它可以帮助开发者轻松地获取并应用各种图片素材,以打造出独具特色的Android应用。在使用过程中,开发者不仅要关注素材的质量和多样性,还要注意资源的合理使用和...

    android图片缩放放大

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

    Android-iOS图片裁剪工具类

    【Android-iOS图片裁剪工具类】是一种跨平台的图像处理技术,主要应用于移动设备上的应用程序,如Android和iOS。这种工具类库通常提供了一系列功能,使得开发者能够方便地实现图片的选择、裁剪、旋转以及调整等操作...

    Android全屏图片显示

    在Android上,有许多优秀的图片加载库可以帮助我们高效地加载图片,如Glide、Picasso、Fresco等。这里推荐使用Glide,它具有内存管理、缓存策略和强大的图片处理能力。首先,在项目中添加Glide的依赖: ```groovy...

Global site tag (gtag.js) - Google Analytics