android - 位图上的水反射效果

标签 android image bitmap effect bitmapimage

我试图在位图上实现水反射效果。正如我看到一些名为水反射的应用程序。我知道如何进行图像的反射,但图像上的波浪让我对如何完成感到困惑。

例如看这张图片

enter image description here

我做了很多关于位图操作的应用程序,但这很难实现。 所以关于从哪里开始的任何想法。只是一个开始的想法可能会有所帮助。

最佳答案

对于任何需要的人,我尝试了一些简单的技巧来获得与水反射效果一样接近的效果。它不是很好,但我觉得还不错。

我用了两种方法

位图反射法(给位图作为参数)

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

好吧,这是我的水效果版本,我知道这看起来很糟糕。 因此,如果有人仍然获得更好的效果,请分享您的代码。 谢谢

关于android - 位图上的水反射效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21721247/

相关文章:

android - 如何将位图从 ImageView 保存到数据库 sqlite?

android - Canvas.drawBitmap() 忽略绘画的平铺模式

android - 使用 aChartEngine 获取饼图切片的值

android - 将 Google map 添加到 Android 应用

python - 从灰色图像创建彩色图像

image - 如何在 MATLAB 中将图像变形为梯形

android - 在我的播放器中添加 Widevine DRM 支持

android - InApp 订阅已过期,如何在服务器端进行检查

html - 边框悬停后如何停止图像移动?

Android - 位图和内存管理?