Android 位图的水反射效果

Android 位图的水反射效果,android,image,bitmap,effect,bitmapimage,Android,Image,Bitmap,Effect,Bitmapimage,我试图在位图上实现水的反射效果。当我看到一些叫做水反射的应用程序时。我知道如何进行图像的反射,但图像上的波浪使我对如何进行感到困惑 例如,请参见此图 我做了很多关于位图操作的应用,但这很难实现。 所以你知道从哪里开始吗。只是一个开始的想法可能会有所帮助。与此相关的教程: 也请阅读以下问题:。 读一读这两本书,我希望你能从中有所了解 您可能还想查看以下内容:,您可以通过屏蔽来实现这一点,这段代码可能会对您有所帮助 编辑 另请参见此以供参考 这只是一个想法,但基本上,您需要在图像的底部应用

我试图在位图上实现水的反射效果。当我看到一些叫做水反射的应用程序时。我知道如何进行图像的反射,但图像上的波浪使我对如何进行感到困惑

例如,请参见此图

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

与此相关的教程: 也请阅读以下问题:。 读一读这两本书,我希望你能从中有所了解


您可能还想查看以下内容:,

您可以通过屏蔽来实现这一点,这段代码可能会对您有所帮助

编辑

另请参见此以供参考


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

下面是一个伪代码,给您一个提示:

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); 
   }
}
for(int x=0;x
对于需要的任何一个,我都尝试了一些简单的技巧,以尽可能接近水反射效果。这不是很好,但我觉得很好

我用了两种方法

位图反射方法(将位图作为参数)

位图叠加方法。我采取了一些不透明的波浪位图覆盖在反射图像。让它看起来像水

 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的水效教程。但是链接来源很好。@sandeep通过android做的应该是类似的,我想,你介意在我的答案上打个勾吗?是的,我会等待更接近的答案,然后在这里标出帮助我实现目标的答案。我肯定会支持你的答案,因为它有一些好的来源。我已经试过掩蔽,但它看起来不像水的效果。但是谢谢你的回答。你的参考链接会产生连锁反应。我的意思是喜欢动态壁纸或动画。但我想在静止位图图像上产生水波效果。是的,我知道,但我认为这在逻辑上对你们有帮助,所以我发布了。我有一个疑问。在最后一行的第二行——“img.get”。我们想得到什么?img是您要添加反射的原始图像。img.get实际上是在sourceX,sourceY点获取颜色。output.set实际上是output.setColor(我将相应地编辑我的答案),我认为代码有问题。在android中,它的img.getPixel而不是img.getcolorYes,正如我所说,这是伪代码,因为我只在处理过程中测试了它(没有时间设置完整的应用程序测试来修改图像),你能提供你使用的wave图像吗?你有解决方案吗,我有同样的问题
 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;
    }