1. 程式人生 > >Android --小功能 Android中幾種影象特效處理 (一)

Android --小功能 Android中幾種影象特效處理 (一)

這一節給大家分享的是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控制元件,程式碼如下:

<?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,程式碼如下:

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


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 --功能 Android影象特效處理

這一節給大家分享的是Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等. 廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對當前

Android影象特效處理

Android中有很多圖片特效處理技巧,比如圓角、倒影,今天為大家分享一個例項,本例主要是先獲取桌布(getWallpaper()),然後對當前桌布的一些特效處理。   第一步:新建一個Android工程命名為ImageDemo,工程結構如下:   第二步:新建

Android開發案例:Android影象特效處理

·      ·           Android中有很多圖片特效處理技巧,比如圓角、倒影,今天為大家分享一個例項,本例主要是先獲取桌布(getWallpaper()),然後對當前桌布的一些特效處理。   第一步:新建一個Android工程命名為ImageDemo,工程

技術轉載:Android高手進階教程(二十二)之---Android影象特效處理的集錦!! .

這一節給大家分享的是Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等. 廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對當前

Android高手進階教程之---Android影象特效處理的集錦!!

大家好,這一節給大家分享的是Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等. 廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對

Android影象特效處理的集錦!!

大家好,這一節給大家分享的是Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等. 廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對當前桌布的一些特效處理

android 筆記 --- Android影象特效處理的集錦

Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等.廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對當前桌布的一些特效處理.大家按步

Android影象特效處理的集錦!!!

大家好,這一節給大家分享的是Android中幾種影象特效處理的小技巧,比如圓角,倒影,還有就是圖片縮放,Drawable轉化為Bitmap,Bitmap轉化為Drawable等等. 廢話少說了,直接講解今天的例項,本例主要是先獲取桌布(getWallpaper()),然後對當

Matplotlib常用的圖形

條形圖 條形圖常常用來描述一組資料的對比情況,例如:一週七天,每天的城市車流量等。【條形圖有兩個引數x,y】bar()繪製豎直條形圖、barh()繪製水平條形圖。 匯入繪圖工具包: import matplotlib.pyplot as plt imp

Android 圖解逆向工程ARM常用匯編指令

我們走得太快,靈魂都跟不上了。 微小的幸福就在身邊,容易滿足就是天堂。 在逆向和爆破中我們經常會在IDA中接觸到彙編,一般做安卓的不會太瞭解VB回編等,不太瞭解的同學可以先檢視上篇文章《Android ARM常用的彙編指令合集》 再來繼續我們

spring個主要的類InitializingBean介面

spring中幾個重要的類(一)InitializingBean介面 專案中管理事務比較簡單,用TransactionTemplate,就直接以TransactionTemplate為入口開始學習。 TransactionTemplate的原始碼如下: public class TransactionTem

聊聊高併發實現自旋鎖

在聊聊高併發(五)理解快取一致性協議以及對併發程式設計的影響 我們瞭解了處理器快取一致性協議的原理,並且提到了它對併發程式設計的影響,“多個執行緒對同一個變數一直使用CAS操作,那麼會有大量修改操作,從而產生大量的快取一致性流量,因為每一次CAS操作都會發出廣播通知其他處理

Tensorflow常見問題處理 TensorFlow 影象處理 影象編解碼,影象尺寸調整 tensorflow():圖片處理 TensorFlow 處理圖片

1、Tensorflow中影象處理函式(影象大小調整)   Tensorflow中影象處理函式(影象大小調整)   tensorflow入門之---------影象大小調整   TensorFlow 影象預處理(一) 影象編解碼,影象尺寸調整   Tensorflow針對不定尺寸的圖片讀寫tfreco

Android延後處理事件的方法

 一、Handler和TimerTask相結合 1、首先定義TimerTask TimerTask task = new TimerTask(){ public void run() { Message message = new Message()

適合白用的css睡在中間居中的方式!!!

HTML css css3. javascript 初學者 平常小白最討厭的事情就是css為什麽沒有辦法居中,現在小狐貍為大家整理幾種方式,請廣大人民群眾笑納!!! 吐舌頭 1水平居中1.1 內聯元素水平居中利用 text-align: center 可以實現在塊級元素內部的內聯元素水平居

UML類之間的關係,關聯association,聚合Aggregation,組合Composition

類之間可能存在以下幾種關係:關聯(association)、依賴(dependency)、聚合(Aggregation,也有的稱聚集)、組合(Composition)、泛化(generalization,也有的稱繼承)、實現(Realization)。 關聯是指兩個類之間存在某種特定的對應關係,例如客戶和訂

python 字串的處理

1、list轉string字串      使用''.join(list) 例:      listA=['我'.'是','Python','菜鳥']     str = ''.join(listA)

Android Studio配置及使用OpenCV示例

Android Studio配置及使用OpenCV前言:最近在做專案移植,專案較大,在Eclipse中配置的Jni及OpenCV環境沒任何問題,但是遷移到Studio中就問題一大堆,網上也找了一些資料參考及學習,很感謝前人留下的總結及經驗。關於在AS中使用jni及配置Open

angularjs2 常用的型別String,Number

let a:Number=1;//數值型別 let b:String = 'angularjs2';//字元型別 let c:boolean = true; //布林型別 let d:Number [

C#常用的處理字串的方法總結

主要有以下幾種: string[i]所獲得的元素是隻讀的。 string.ToCharArray() (把string獲得一個可寫的字元陣列) string.Replace(old, new)(將字串中指定字元或者子字串做相應的替換) string.ToLower