【问题标题】:Water reflection effect on bitmap位图上的水反射效果
【发布时间】:2014-03-10 09:12:48
【问题描述】:

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

例如看这张图片

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

【问题讨论】:

  • 你有解决办法吗,我也有同样的问题
  • 您是否找到任何解决方案如何创建帧以生成 gif 文件或 mp4?我也有同样的问题。我可以创建波纹位图,但找不到任何方法来生成移动波和创建帧.你能帮帮我吗?
  • Butani 我看到你也在找这个问题,你能找到解决办法吗?

标签: android image bitmap effect bitmapimage


【解决方案1】:

与此相关的教程:http://www.xaraxone.com/webxealot/workbook34/page_4.htm 也可以阅读这个问题:Add water effect on bitmap android。 阅读他们两个,我希望你能从中得到一个想法

您可能还想查看这些:123

【讨论】:

  • 但是没有指向android的水效果教程。但是链接来源很好。
  • @sandeep 通过 android 做的事情我想应该是相似的,你介意给我的答案打勾吗?
  • 是的,我会等待一些更接近的答案,然后标记帮助我在这里实现目标的答案。我肯定会支持你的答案,因为它有一些很好的来源。
【解决方案2】:

【讨论】:

  • 我已经尝试过遮罩,但它看起来不像水效果。但感谢您的回答。
  • 您的参考链接具有连锁反应。我的意思是喜欢动态壁纸或动画。但我想要在静止的位图图像上产生水波效果。
  • 是的,我知道,但我认为这对你的逻辑有帮助,所以我发布了。
【解决方案3】:

这只是一个想法,但基本上,您需要在图像的底部应用变形,这意味着对于下半部分的每个像素,您计算一个位置以从顶部图片中获取它的颜色。

这是一个伪代码给你一个提示:

for (int x = 0;  x < width; x++) {

    for (int y = 0; y < img.height; y++) {

        // Compute a position on the original image
        // tweak the values heres to get the effect you want
        sourceX = x + (int) (cos(10000.0 / y) * 20); 
        sourceY = img.height - y - 1 +(int)( sin(y* 0.5) * 20); 

        // Maybe check the range of sourceX and source Y

        int color = img.getColor(sourceX, sourceY) 

        outptut.setColor(x, y + img.height, color); 
   }
}

【讨论】:

  • 我有一个疑问。在倒数第二行 -"img.get" 。我们想达到什么目的..?
  • img 是要添加反射的原始图像。 img.get 实际上是在 sourceX、sourceY 点获取颜色。 output.set 实际上是 output.setColor (我会相应地编辑我的答案)
  • 我认为代码有问题。我在 int color line 上收到错误。
  • 在 android 中是 img.getPixel 而不是 img.getcolor
  • 是的,正如我所说,它是伪代码,因为我只在处理中对其进行了测试(没有时间设置完整的应用程序测试来修改图像)
【解决方案4】:

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

我用了两种方法

位图反射方式(给位图作为参数)

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

嗯,这是我的水效果版本,我知道这看起来很糟糕。 所以如果有人仍然有更好的效果,请分享你的代码。 谢谢你

【讨论】:

  • 能否提供您使用的波形图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
相关资源
最近更新 更多