位图水中的倒影效果 [英] Water reflection effect on bitmap
问题描述
我想实现的位图水中的倒影效果。当我看到一些应用程序被称为水中的倒影。我知道该怎么做了图像的反射,但在图像上的波是什么让我困惑于它是如何实现的。
I trying to achieve water reflection effect on bitmap. As I saw some apps called water reflection. I know how to do the reflection of the image but the wave on the image is what making me confused on how it is done.
看到这个形象的比方
我做了位图操作许多应用程序,但是这是相当难以实现。
那么,从哪里开始的想法。只是一个想法,开始可能会有所帮助。
I did many apps on bitmap manipulation but this is quite hard to achieve. So any idea on where to start. Just an idea to start can be helpful.
推荐答案
有关所需的任何一个,我尝试了一些简单的技巧,以获得尽可能接近水的反射效果。这不是很大,但它看起来好像没什么问题。
For any one needed, I tried some simple tricks to get as closer as water reflection effect. It is not great but it looks fine to me.
我用两种方法
位图反射法(给位图作为参数)
Bitmap reflection method (give bitmap as a parameter)
public static Bitmap Reflection(Bitmap imageBitmap) {
int width = imageBitmap.getWidth();
int height = imageBitmap.getHeight();
Matrix matrix = new Matrix();
matrix.preScale(1, -1);
Bitmap reflectionImage = Bitmap.createBitmap(imageBitmap, 0,
0, width, height , matrix, false);
Bitmap newbit=Bitmap.createScaledBitmap(reflectionImage, reflectionImage.getWidth()/8, reflectionImage.getHeight()/8, true);
Bitmap newbit1=Bitmap.createScaledBitmap(newbit, newbit.getWidth()*8, newbit.getHeight()*8, true);
Bitmap scalednew=Bitmap.createScaledBitmap(newbit1, width, height-(height/4), true);
Bitmap newscaledone=overlay(scalednew);
reflectionImage=newscaledone;
Bitmap reflectedBitmap = Bitmap.createBitmap(width,
(height + height), Config.ARGB_8888);
Canvas canvas = new Canvas(reflectedBitmap);
canvas.drawBitmap(imageBitmap, 0, 0, null);
Paint defaultPaint = new Paint();
canvas.drawRect(0, height, width, height, defaultPaint);
canvas.drawBitmap(reflectionImage, 0, height , null);
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
canvas.drawRect(0, height, width, reflectedBitmap.getHeight()
, paint);
return reflectedBitmap;
}
位图覆盖的方法。我正在一波位图与一些不透明叠加反射的图像。因此,它可能看起来像水。
Bitmap overlay method. I am taking a wave bitmap with some opacity to overlay on the reflected image. So that it may look like water.
Bitmap wavebitmap=BitmapFactory.decodeResource(getResources(), R.drawable.waves1);
private static Bitmap overlay( Bitmap bmp2) {
Bitmap bmp1=WaterReflectionMainActivity.wavebitmap;
Bitmap bmp1new =Bitmap.createScaledBitmap(bmp1, bmp2.getWidth(), bmp2.getHeight(), true);
Bitmap bmOverlay = Bitmap.createBitmap(bmp1new.getWidth(), bmp1new.getHeight(), bmp1new.getConfig());
Canvas canvas = new Canvas(bmOverlay);
canvas.drawBitmap(bmp2, new Matrix(), null);
canvas.drawBitmap(bmp1new, new Matrix(), null);
return bmOverlay;
}
嗯,这是我的水效果的版本,我知道这看起来狗屎。
因此,如果有人仍然有一些更好的效果,请分享你的code。
谢谢
Well this is my version of water effect, I know this looks shit. So if anyone still got some better effect please share your code . thank you
这篇关于位图水中的倒影效果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!