图片倒影效果

2016/09/18 15:37
阅读数 56

“鱼龙隐苍翠,鸟兽游清泠;菰蒲林下秋,薜荔波中轻。”这是唐代诗人储光羲在《同诸公秋霁曲江俯见南山》中描写倒影的神奇魅力的诗句、而现如今我们通过代码就可以轻松简单的实现这种倒影效果了、是不是强大呢、好了、进入主题、


实现图片倒影效果的主要方法如下:

/**
	 * 图片倒影效果
	 * @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();
		
	}
}

倒影效果图如下:

测试效果图



展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部