`

Android中几种图像特效处理的集锦

阅读更多
第二步:新建一个.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; 
    } 
     




第三步:修改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> 

第四步:修改主核心程序,ImageDemo.java,代码如下:

view plaincopy to clipboardprint?
package com.android.tutor; 
import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.widget.ImageView; 
public class Imagedemo extends Activity { 
    private ImageView mImageView01,mImageView02; 
     
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        setupViews(); 
    } 
    
    private void setupViews(){ 
        mImageView01 = (ImageView)findViewById(R.id.image01); 
        mImageView02 = (ImageView)findViewById(R.id.image02); 
         
        //获取壁纸返回值是Drawable 
        Drawable drawable = getWallpaper(); 
        //将Drawable转化为Bitmap 
        Bitmap bitmap = ImageUtil.drawableToBitmap(drawable); 
        //缩放图片 
        Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100, 100); 
        //获取圆角图片 
        Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f); 
        //获取倒影图片 
        Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap); 
        //这里可以让Bitmap再转化为Drawable 
//      Drawable roundDrawable = new BitmapDrawable(roundBitmap);        
//      Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);        
//      mImageView01.setBackgroundDrawable(roundDrawable); 
//      mImageView02.setBackgroundDrawable(reflectDrawable); 
                 
        mImageView01.setImageBitmap(roundBitmap); 
        mImageView02.setImageBitmap(reflectBitmap); 
    } 
       
        
分享到:
评论

相关推荐

    Android 图像连环画特效源码.rar

    在Android平台上,图像...这个压缩包中的源代码很可能是实现了以上部分或全部知识点,通过分析和学习这个源码,开发者可以深入理解Android图像处理机制,提升自己的技能,并有可能在此基础上创建更多创新的图像特效。

    Android 图像冰冻特效源码.zip

    "Android 图像冰冻特效源码.zip" 提供了一个学习和参考的项目,旨在实现一种创新的图像特效——冰冻效果。这个效果通常用于使图像看起来像是被冰冻或者凝固,给用户带来独特的视觉体验。 冰冻特效在Android中实现,...

    Android 图像连环画特效源码.zip

    总的来说,这个源码提供了一个实践图像特效的实例,对于想要在Android应用中实现独特视觉效果的开发者来说,是一个极好的学习和参考资源。通过学习和应用这些代码,不仅可以增强图像处理技能,还能提升应用的用户...

    【Android精品资源】android常用图片特效处理

    在Android中实现图片特效处理,主要涉及以下几个技术点: 1. **Bitmap操作**:Bitmap是Android中用于存储和显示图像的基本类。开发者可以通过Bitmap对象进行图片的加载、解码、绘制以及各种特效处理。例如,可以...

    Android【动画】【特效】 17种动画特效

    7. **Tween动画**:综合运用以上几种动画,创建复杂的组合动画。 8. **帧动画**:通过连续播放一系列静态图像来创建连续的动画效果,常用于加载图标或游戏动画。 9. **ObjectAnimator**:属性动画的一种,可以改变...

    DragSelectRecyclerView长按滑动多选图像android特效.rar

    《Android开发:DragSelectRecyclerView实现长按滑动多选图像特效》 在Android应用开发中,用户界面(UI)的设计和交互体验至关重要。一个优秀的应用不仅要功能强大,而且要操作流畅,界面美观。...

    Android 图像冰冻特效源码.rar

    "Android 图像冰冻特效源码"可能是一个开源项目,它实现了独特的图像“冰冻”特效,为应用程序增添了一种引人入胜的视觉体验。这个源码库可能包含了一些自定义视图、动画类或库,用于在Android平台上创建这种特殊的...

    android常用图片特效处理.zip

    7. **图片压缩**:Android的Bitmap类提供了几种压缩方式,如`compress(Bitmap.CompressFormat format, int quality, OutputStream stream)`,可以控制图片的质量和大小。另外,第三方库如 Glide 和 Fresco 自带了...

    Android 图像冰冻特效源码.zip源码资源下载

    "Android 图像冰冻特效源码.zip" 提供的源码资源,很可能是为了展示如何在应用程序中实现一种图像“冰冻”特效。这种特效可能涉及到动态改变图像的透明度、色彩或者运动状态,从而营造出物体被冰冻的视觉错觉。接...

    Android TextView闪闪发光特效

    在Android开发中,为UI元素添加动画效果可以极大地提升用户体验,"Android TextView闪闪发光特效"就是这样一种常见的视觉增强技术。这种特效通常通过Shimmer效果来实现,它可以让TextView的文字或图像看起来像在闪烁...

    Android源码——图像柔化美白特效源码_new_37.zip

    "Android源码——图像柔化美白特效源码_new_37.zip"提供的源码,是针对图像处理的一种常见应用——图像柔化和美白特效的实现。这类特效广泛应用于自拍应用、美图工具等,可以让用户在拍摄或编辑照片时实现更自然、更...

    android图像处理系统框架1.2版

    以上是对"android图像处理系统框架1.2版"可能包含的关键知识点的详尽解析,每个点都值得开发者深入研究和应用到实际项目中。通过了解和掌握这些内容,可以提升Android应用的图像处理能力,提供更丰富的用户体验。

    Android 切换游戏场景特效的实现

    在实现游戏场景切换特效时,有以下几种常见的技术手段: 1. **渐变过渡**:通过在两个场景之间绘制一个逐渐变化的颜色或者图像,使场景之间的切换看起来更为自然。这可以通过在OpenGL ES中使用顶点着色器和片段着色...

    Android特效的幻灯片-Ken Burns

    其中,"Ken Burns"特效,也被称为“Ken Burns效果”或“移动镜头”效果,是一种广泛应用于幻灯片、照片展示和视频制作中的动态图像处理技术。这种特效通过模拟摄像机对静态图像的平移和缩放,赋予静止的画面一种动态...

    android cover flow特效

    在Android开发中,Cover Flow是一种视觉效果,常用于展示一系列图像,如音乐专辑封面或图片库,用户可以平滑地滚动这些元素,看起来就像是在3D空间中翻转。这个特效给用户带来了丰富的互动体验,增加了应用的吸引力...

    [安卓开源]100种图片处理效果大全项目

    3. **滤镜效果**: Android支持多种图像特效,如灰度、饱和度调整、色调映射等。这些效果可以通过ColorMatrix或使用第三方库实现,例如使用 glide-colorfilter 插件添加自定义滤镜。 4. **图片裁剪**: 使用Bitmap....

Global site tag (gtag.js) - Google Analytics