圖片倒影效果

“魚龍隱蒼翠,鳥獸遊清泠;菰蒲林下秋,薜荔波中輕。”這是唐代詩人儲光羲在《同諸公秋霽曲江俯見南山》中描寫倒影的神奇魅力的詩句、而現如今我們通過代碼就可以輕鬆簡單的實現這種倒影效果了、是不是強大呢、好了、進入主題、


實現圖片倒影效果的主要方法如下:

	
	/**
	 * 圖片倒影效果
	 * @param originalImage
	 * @return
	 */
    public static Bitmap createMirrorImage(Bitmap originalImage)  {  
    	
        int width = originalImage.getWidth();  
        int height = originalImage.getHeight();
        //反射倒影圖片的高度
        int mirrorHeight = height>>1;
        
        Matrix matrix = new Matrix();  
        // 實現圖片翻轉90度  
        matrix.preScale(1, -1);  
        // 創建倒影圖片(是原始圖片的一半大小)  
        Bitmap mirrorImage = Bitmap.createBitmap(originalImage, 0,mirrorHeight , width, mirrorHeight, matrix, false);  
        // 創建總圖片(原圖片 + 倒影圖片+中間間隔1)  
        Bitmap finalBitmap = Bitmap.createBitmap(width, height + mirrorHeight + 1, Config.ARGB_8888);  
        // 創建畫布  
        Canvas canvas = new Canvas(finalBitmap);  
        canvas.drawBitmap(originalImage, 0, 0, null);  
        //把倒影圖片畫到畫布上  (中間間隔1感覺更真實)
        canvas.drawBitmap(mirrorImage, 0, height + 1, null);  
        Paint shaderPaint = new Paint();  
        //創建線性漸變LinearGradient對象  
        LinearGradient shader = new LinearGradient(0, height + 1, 0, finalBitmap.getHeight(), 0x7fffffff,  
                0x00ffffff, TileMode.MIRROR);  

        shaderPaint.setShader(shader);  
        
        shaderPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));  
        //畫布畫出反轉圖片大小區域、然後把漸變效果加到其中、就出現了圖片的倒影效果、  
        canvas.drawRect(0, height + 1, width, finalBitmap.getHeight(), shaderPaint);  
        
        return finalBitmap;  
    }



在這裏我寫了個簡單的小程序、來實現圖片倒影的效果、下面是測試時主要用到的一些文件和測試代碼:

測試用到的原圖片文件:

測試圖片


activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000"
    android:gravity="center">
    <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>


MainActivity.java

public class MainActivity extends Activity {

	private ImageView iv;
	
	
	private void init(){
		
		iv = (ImageView)findViewById(R.id.iv);
		 Bitmap bmp = ((BitmapDrawable) getResources().getDrawable(R.drawable.test)).getBitmap();  
		iv.setImageBitmap(createMirrorImage(bmp));
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		init();
		
	}
}

倒影效果圖如下:

測試效果圖



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章