- 浏览: 505791 次
- 性别:
- 来自: 惠州
-
文章分类
- 全部博客 (255)
- ant (1)
- springMVC (2)
- ajax (4)
- oracle (12)
- SSH (13)
- struts1 (2)
- Hibernate (14)
- spring (5)
- jstl (1)
- 连接池 (1)
- acegi (4)
- java (17)
- jquery (11)
- div+css (4)
- drupal (1)
- php (8)
- freemaker调模板生成静态页面 (1)
- xml (1)
- json (2)
- javascript (9)
- 正则表达式 (4)
- Ext (8)
- jdbc (1)
- sql server (2)
- perl (5)
- db4o (1)
- webservice (4)
- flex (13)
- it资讯 (1)
- joomla (0)
- 设计模式 (1)
- struts2 (4)
- s2sh (8)
- linux (3)
- ejb (2)
- android旅途 (24)
- android (36)
- C/C++ (16)
- mysql (1)
最新评论
-
fengyuxing168:
IBelyService bs = IBelyService. ...
为 Android 添加 Java 层服务也就是添加自定义的aidl服务到serviceManager 通过ServiceManager.getService取 -
dengzhangtao:
"由于ActivityManagerService是 ...
binder理解 -
yzyspy:
ActivityManagerService:startHom ...
Android的Launcher成为系统中第一个启动的,也是唯一的 -
Matchstick:
使用SELECT DISTINCT alias FROM Po ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题 -
dlheart:
没看懂你什么意思啊,我遇到的问题是一对多,设了fetch = ...
hibernate 一对多表查询时fetchMode.join 生成left outer join 出来数据重复问题
Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等
- 博客分类:
- android旅途
Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等
大家好,这一节给大家分享的是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等.
废话少说了,直接讲解今天的实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理.大家按步骤一步一步来:
第一步:新建一个Android工程命名为ImageDemo,工程结构如下:
第二步:新建一个.java文件,命名为ImageUtil.java,在里面定义一些图片处理方法,代码如下:
view plaincopy to clipboardprint?
package com.android.tutor;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Bitmap.Config;
import android.graphics.PorterDuff.Mode;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.Drawable;
public class ImageUtil {
//放大缩小图片
public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
float scaleWidht = ((float)w / width);
float scaleHeight = ((float)h / height);
matrix.postScale(scaleWidht, scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
return newbmp;
}
//将Drawable转化为Bitmap
public static Bitmap drawableToBitmap(Drawable drawable){
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height,
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0,0,width,height);
drawable.draw(canvas);
return bitmap;
}
//获得圆角图片的方法
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
//获得带倒影的图片方法
public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){
final int reflectionGap = 4;
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.preScale(1, -1);
Bitmap reflectionImage = Bitmap.createBitmap(bitmap,
0, height/2, width, height/2, matrix, false);
Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmapWithReflection);
canvas.drawBitmap(bitmap, 0, 0, null);
Paint deafalutPaint = new Paint();
canvas.drawRect(0, height,width,height + reflectionGap,
deafalutPaint);
canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
Paint paint = new Paint();
LinearGradient shader = new LinearGradient(0,
bitmap.getHeight(), 0, bitmapWithReflection.getHeight()
+ reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);
paint.setShader(shader);
// Set the Transfer mode to be porter duff and destination in
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
// Draw a rectangle using the paint with our linear gradient
canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
+ reflectionGap, paint);
return bitmapWithReflection;
}
}
package com.android.tutor;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Bitmap.Config;
import android.graphics.PorterDuff.Mode;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.Drawable;
public class ImageUtil {
//放大缩小图片
public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
float scaleWidht = ((float)w / width);
float scaleHeight = ((float)h / height);
matrix.postScale(scaleWidht, scaleHeight);
Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
return newbmp;
}
//将Drawable转化为Bitmap
public static Bitmap drawableToBitmap(Drawable drawable){
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height,
drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0,0,width,height);
drawable.draw(canvas);
return bitmap;
}
//获得圆角图片的方法
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
//获得带倒影的图片方法
public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){
final int reflectionGap = 4;
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.preScale(1, -1);
Bitmap reflectionImage = Bitmap.createBitmap(bitmap,
0, height/2, width, height/2, matrix, false);
Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmapWithReflection);
canvas.drawBitmap(bitmap, 0, 0, null);
Paint deafalutPaint = new Paint();
canvas.drawRect(0, height,width,height + reflectionGap,
deafalutPaint);
canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
Paint paint = new Paint();
LinearGradient shader = new LinearGradient(0,
bitmap.getHeight(), 0, bitmapWithReflection.getHeight()
+ reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);
paint.setShader(shader);
// Set the Transfer mode to be porter duff and destination in
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
// Draw a rectangle using the paint with our linear gradient
canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
+ reflectionGap, paint);
return bitmapWithReflection;
}
}
第三步:修改main.xml布局文件,主要放了两个ImageView控件,代码如下:
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/image01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10px"
/>
<ImageView
android:id="@+id/image02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10px"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:id="@+id/image01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10px"
/>
<ImageView
android:id="@+id/image02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10px"
/>
</LinearLayout>
第四步:修改主核心程序,ImageDemo.java,代码如下font-family
发表评论
-
Android display架构分析
2011-11-08 14:43 2517Android display架构分析 高通7系列硬件架 ... -
android usb流程(转载加整理)
2011-11-08 14:42 3098android usb流程(转载加整理) ... -
C++友元friend --c++利用friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作
2011-09-08 16:36 928<!-- [if gte mso 9]><x ... -
Jni函数调用大全
2011-09-08 16:34 9704Jni函数调用 ... -
android linux 基础知识总结
2011-09-08 16:23 2824android linux 基础知识总结 ===== ... -
pthread_create用法 c线程
2011-09-08 09:34 3600今天开始学习linux下用C开发多线程程序,Linux系统下的 ... -
C++多线程入门(一)
2011-09-05 14:32 1217第1节 背景 为了更好的理解多线程的概念,先对进程,线程 ... -
C++中的虚函数(virtual function)多态
2011-09-05 13:41 9061.简介 虚函数是 ... -
添加一个系统服务sytem service
2011-09-02 15:51 2470方法一: 1.在应用中 com.xxx.spi.SPLLi ... -
android.mk文件
2011-09-02 13:51 1216<!-- [if gte mso 9]><x ... -
android 中使用socket使native和framework通信
2011-09-01 10:14 1171android 中使用socket使native和frame ... -
让你自己写的Android的Launcher成为系统中第一个启动的,也是唯一的Launcher
2011-09-01 09:49 881[转]让你自己写的Android的Launcher成为系统中第 ... -
No implementation found for native Landroid/
2011-08-31 17:30 2359No implementation ... -
Java 线程中的Join、wait、notify,sleep【转】
2011-05-30 09:37 1061Java 线程中的Join、wait、notify ... -
android回调函数总结
2011-02-14 13:26 4355回调函数就是那些自己写的,但是不是自己来调,而是给别人来掉的函 ... -
IPC框架分析 Binder,Service,Service manager
2011-01-22 13:10 1287IPC框架分析 Binder,Servic ... -
Android中SurfaceView的使用示例
2011-01-19 20:54 850SurfaceView在游戏开发中有着举足轻重的地位,它对于画 ... -
Android 的 SurfaceView 双缓冲应用
2011-01-19 20:46 1779双缓冲是为了防止动画闪烁而实现的一种多线程应用,基于Surfa ... -
Android Content Provider[转]
2010-10-21 14:42 1162Android应用程序可以使用 ... -
我的数据你来用—ContentProvider介绍
2010-08-25 09:09 21381.第一步 在Eclipse中, ...
相关推荐
Android中几种图像特效处理方法,是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等.
以上就是关于Android中Drawable和Bitmap相互转换的方法、注意事项以及应用场景的详细解释。理解并熟练运用这些知识,能够帮助开发者更有效地处理图像资源,提高应用的性能和用户体验。在实际项目中,要根据具体需求...
Drawable Bitmap之间的转化Drawable Bitmap之间的转化
在Android中,Drawable是一种图形对象,可以用于绘制视图的背景、按钮图标等。系统提供了多种内置的Drawable类型,如Shape Drawable、Bitmap Drawable等。然而,当系统提供的Drawable无法满足特定需求时,就需要...
大家好,这一节给大家分享的是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等. 废话少说了,直接讲解今天的实例,本例主要是先获取壁纸...
在Android开发中,处理图像数据时,我们经常需要在Drawable、Bitmap、InputStream和byte数组之间进行转换。这些类型的转换在不同的场景下具有重要的作用,例如从网络加载图片、存储图片到本地或者显示在ImageView上...
在Android开发中,创建圆角图片和图片倒影是常见的需求,这主要涉及到图像处理和视图绘制的技术。本文将详细讲解如何在Android平台上实现这些功能。 首先,让我们来看看如何生成圆角图片。在Android中,我们可以...
Bitmap是Android中表示位图图像的基本类,而BitmapDrawable是Drawable的一种,可以被设置为ImageView等视图的源。在某些场景下,例如设置自定义背景或者使用动画时,可能需要将Bitmap转换为BitmapDrawable。这可以...
Android Drawable、Bitmap、byte、灰度 转换
在Android开发中,Drawable是图形和图像处理的重要组成部分,它是一种可以绘制到Canvas上的对象,广泛用于界面元素的装饰和状态表示。以下是对Android中drawable集合的详细解释: 1. **Bitmap Drawable**: Bitmap ...
在Android中,我们可以使用BitmapFactory类来解析图片资源,将其转化为Bitmap对象。例如: ```java Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image); ``` 接下来,我们讨论...
但如果图片不是正方形,为了保持图像的原始宽高比,可以先使用`Bitmap.createBitmap()`方法裁剪出一个正方形区域,然后再进行圆角处理。 5. **性能优化**: 对于大量或者频繁使用的圆角图片,可以考虑使用...
首先,Bitmap是Android中表示位图图像的类。它可以是JPEG、PNG或其它图像格式,通常用于在屏幕上显示图片或者进行像素级操作。Bitmap类提供了多种构造方法,比如从文件路径、输入流或者Bitmap对象创建。此外,...
本文将深入探讨几种常见的Android图形特效,包括图片的圆角、图片的缩放、图片的倒影以及图片的旋转,这些都是Android开发者需要掌握的基本技能。 首先,我们来看如何实现图片的圆角效果。在Android中,可以使用...
Android Drawable、Bitmap、byte、灰度 之间的转换
Drawable转Bitmap、圆角图片、倒影效果等各种特效。
在Android开发中,为了实现各种视觉效果,我们经常需要对图片进行处理,比如将矩形图片转换为圆形或带有圆角的图片。本教程将详细讲解如何通过自定义`Drawable`来实现这样的功能。 首先,我们需要理解`Drawable`在...
在Android开发中,创建具有抗锯齿效果的透明背景圆角图像是一项常见的需求,这通常涉及到自定义View或者使用特定的图像处理库。本篇将深入探讨如何实现这一功能。 首先,我们需要理解抗锯齿(Anti-Aliasing)技术。...
以下将详细介绍Android中实现几种图片特效的方法。 1. **放大缩小图片**: 在Android中,我们可以通过Matrix类来实现图片的缩放。Matrix提供了postScale()方法,该方法允许在现有的变换矩阵上应用缩放操作。在`...