import com.badlogic.gdx.graphics.Pixmap; public class Blur { public static void blurImage(int radius, Pixmap pixmap, int width, int height, int rectx, int recty, int rectw, int recth) { int w = pixmap.getWidth(); int h = pixmap.getHeight(); int xoffset = 0; int yoffset = 0; if (width > w) { width = w; } if (height > h) { height = h; } w = width; h = height; if (rectx > width) { rectx = 0; } if (recty > height) { recty = 0; } if (rectx + rectw > width) { rectw = width - rectx; } if (recty + recth > height) { recth = height - recty; } xoffset = rectx; yoffset = recty; w = rectw; h = recth; // mwxx red border around //pixmap.setColor(1, 0, 0, 1); pixmap.drawRectangle(xoffset, yoffset, w, h); int wm = w - 1; int hm = h - 1; int wh = w * h; int div = radius + radius + 1; int r[] = new int[wh]; int g[] = new int[wh]; int b[] = new int[wh]; int rsum, gsum, bsum, x, y, i, p, yp, yi, yw; int vmin[] = new int[(int) Math.max(w, h)]; int divsum = (div + 1) >> 1; divsum *= divsum; int dv[] = new int[256 * divsum]; for (i = 0; i < 256 * divsum; i++) { dv[i] = (i / divsum); } yw = yi = 0; int[][] stack = new int[div][3]; int stackpointer; int stackstart; int[] sir; int rbs; int r1 = radius + 1; int routsum, goutsum, boutsum; int rinsum, ginsum, binsum; for (y = 0; y < h; y++) { rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; for (i = -radius; i <= radius; i++) { int index = yi + Math.min(wm, (int) Math.max(i, 0)); int yy = (int) (index / w); int xx = (int) (index % h); // 32-bit RGBA8888 p = pixmap.getPixel(xx + xoffset, yy + yoffset); int mask = p & 0xFFFFFFFF; int rr = (mask >> 24) & 0xff; int gg = (mask >> 16) & 0xff; int bb = (mask >> 8) & 0xff; sir = stack[i + radius]; sir[0] = rr; sir[1] = gg; sir[2] = bb; rbs = r1 - (int) Math.abs(i); rsum += sir[0] * rbs; gsum += sir[1] * rbs; bsum += sir[2] * rbs; if (i > 0) { rinsum += sir[0]; ginsum += sir[1]; binsum += sir[2]; } else { routsum += sir[0]; goutsum += sir[1]; boutsum += sir[2]; } } stackpointer = radius; for (x = 0; x < w; x++) { r[yi] = dv[rsum]; g[yi] = dv[gsum]; b[yi] = dv[bsum]; rsum -= routsum; gsum -= goutsum; bsum -= boutsum; stackstart = stackpointer - radius + div; sir = stack[stackstart % div]; routsum -= sir[0]; goutsum -= sir[1]; boutsum -= sir[2]; if (y == 0) { vmin[x] = Math.min(x + radius + 1, wm); } int index = yw + vmin[x]; int yy = (int) (index / w); int xx = (int) (index % h); // 32-bit RGBA8888 p = pixmap.getPixel(xx + xoffset, yy + yoffset); int mask = p & 0xFFFFFFFF; int rr = (mask >> 24) & 0xff; int gg = (mask >> 16) & 0xff; int bb = (mask >> 8) & 0xff; sir[0] = rr; sir[1] = gg; sir[2] = bb; rinsum += sir[0]; ginsum += sir[1]; binsum += sir[2]; rsum += rinsum; gsum += ginsum; bsum += binsum; stackpointer = (stackpointer + 1) % div; sir = stack[(stackpointer) % div]; routsum += sir[0]; goutsum += sir[1]; boutsum += sir[2]; rinsum -= sir[0]; ginsum -= sir[1]; binsum -= sir[2]; yi++; } yw += w; } for (x = 0; x < w; x++) { rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; yp = -radius * w; for (i = -radius; i <= radius; i++) { yi = (int) Math.max(0, yp) + x; sir = stack[i + radius]; sir[0] = r[yi]; sir[1] = g[yi]; sir[2] = b[yi]; rbs = r1 - (int) Math.abs(i); rsum += r[yi] * rbs; gsum += g[yi] * rbs; bsum += b[yi] * rbs; if (i > 0) { rinsum += sir[0]; ginsum += sir[1]; binsum += sir[2]; } else { routsum += sir[0]; goutsum += sir[1]; boutsum += sir[2]; } if (i < hm) { yp += w; } } yi = x; stackpointer = radius; for (y = 0; y < h; y++) { int rr = dv[rsum]; int gg = dv[gsum]; int bb = dv[bsum]; pixmap.setColor(rr / 255f, gg / 255f, bb / 255f, 1f); int yy = (int) (yi / w); int xx = (int) (yi % h); pixmap.drawPixel(xx + xoffset, yy + yoffset); rsum -= routsum; gsum -= goutsum; bsum -= boutsum; stackstart = stackpointer - radius + div; sir = stack[stackstart % div]; routsum -= sir[0]; goutsum -= sir[1]; boutsum -= sir[2]; if (x == 0) { vmin[y] = Math.min(y + r1, hm) * w; } p = x + vmin[y]; sir[0] = r[p]; sir[1] = g[p]; sir[2] = b[p]; rinsum += sir[0]; ginsum += sir[1]; binsum += sir[2]; rsum += rinsum; gsum += ginsum; bsum += binsum; stackpointer = (stackpointer + 1) % div; sir = stack[stackpointer]; routsum += sir[0]; goutsum += sir[1]; boutsum += sir[2]; rinsum -= sir[0]; ginsum -= sir[1]; binsum -= sir[2]; yi += w; } } } }
相关推荐
Libgdx实现了动画效果,项目含:源码+效果图+APK 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9208095
在标题"Libgdx异步加载图片到本地"中,主要涉及到的技术点是异步加载和图片的本地存储。 异步加载是一种优化性能的方法,它允许应用程序在后台线程中执行耗时操作,如下载或解压缩资源,而不阻塞主线程。在Libgdx中...
libGDX 提供了一系列丰富的图形处理工具,其中就包括图片翻转功能。本篇文章将深入探讨如何在 libGDX 中实现图片的翻转操作,以及涉及到的相关知识点。 在 libGDX 中,我们通常使用 `Texture` 对象来加载和管理图像...
而“libgdx 粒子编辑器”则是LibGDX框架中用于创建和编辑粒子效果的工具。粒子系统在游戏开发中广泛应用于火焰、烟雾、水波、光效等视觉特效的制作,为游戏增添生动性和视觉吸引力。 粒子编辑器允许开发者无需编写...
在这个“Libgdx利用Assetmanager实现图片加密”的实例中,开发者已经实现了对图片的加密算法和解密工具。这是为了防止未经授权的访问者直接查看或复制游戏中的图片资源。加密过程通常涉及到将原始图片数据转换为难以...
LibGDX将其集成到了框架中,使得开发者可以轻松地创建具有真实物理效果的游戏世界。Box2D提供了一个简单的API,允许创建不同形状的物体,设置物理属性,并进行碰撞检测和响应。 在使用这些组件进行游戏开发时,你...
本书“LibGDX Game Development Essentials”致力于为读者提供LibGDX游戏开发框架的核心知识,引导读者了解并掌握如何使用LibGDX来制作游戏。LibGDX是一个开放源码的Java游戏开发框架,它为游戏开发者提供了跨平台...
**LibGDX游戏开发详解** LibGDX是一个强大的开源Java框架,专为跨平台2D和3D游戏开发设计。这个框架允许开发者使用单一代码库创建游戏,可以在Android、iOS、Windows、Mac OS X和Linux等多个平台上运行。"libgdx...
《Libgdx开发丛书之 Learning LibGDX Game Development, 2nd Edition》是一本专为游戏开发者准备的图书,旨在帮助读者深入理解并熟练运用LibGDX这一强大的跨平台游戏开发框架。LibGDX是一个开源的Java库,支持在...
LibGDX是一个强大的开源Java框架,专为跨平台2D和3D游戏开发设计。它提供了丰富的功能,包括图形渲染、输入处理、物理模拟以及我们关注的“游戏音效”部分。在LibGDX中,处理音频是非常直观且高效的,这使得开发者...
LibGDX的`Sound`接口则用于处理短促的一次性音频效果。和`Music`类似,可以通过`play()`播放,`pause()`和`stop()`控制,但`Sound`还支持通过`play(float volume, float pitch, float pan)`方法设置音量、音调和立体...
在这个"libGDX粒子编辑器汉化版.rar"压缩包中,包含了一个特别为libGDX优化的粒子效果编辑器。粒子系统在游戏开发中广泛用于创建各种视觉特效,如爆炸、火花、烟雾、水流等。原生的libGDX粒子编辑器可能对中文用户来...
LibGDX是一个强大的开源游戏开发框架,专为创建跨平台的游戏而设计。它支持Windows、Linux、MacOS、Android以及HTML5,使得开发者能够用Java语言编写一次代码,即可在多个平台上运行。这个“libgdx教程”显然是由...
5. **物理引擎**:通过Box2D集成,LibGDX提供了物理模拟功能,让开发者可以创建真实感的物理效果,如碰撞检测和物体运动。 6. **场景管理**:Scene2D提供了一套易于使用的2D场景管理工具,包含演员(Actor)、舞台...
通过深入学习和实践,开发者可以利用LibGDX创造出具有丰富视觉效果和互动性的2D游戏世界。提供的文件“LibgdxText_3”可能是这个专题系列的源代码或文档,可以帮助进一步理解和实现斜45°地图的细节。
- `assets`目录:存储游戏资源,如图片、音频、Lua脚本等。 - `build.gradle`文件:定义项目的构建设置和依赖。 6. **学习路径**: 对于初学者,首先需要熟悉LibGDX的基本用法,包括设置项目、渲染图形、处理...
标题提到的“libgdx引擎开发的游戏 demo gif图”很可能是指使用LibGDX引擎开发的一个游戏示例,该示例通过GIF动态图展示了游戏运行的效果。 在描述中,提供了一个代码下载链接,可以从CSDN(China Software ...
LibGDX 是一个开源的游戏开发框架,用于创建跨平台的游戏...开发者可以根据游戏需求,灵活运用这些功能来实现丰富的音乐效果。在实际项目中,结合`AssetManager`进行资源管理,能更好地优化内存使用,提高游戏性能。
Texture则存储了图像数据,可以是单个图片或者多个图片组成的动画帧。 2. **ShapeRenderer**: 在Cuboc中,除了使用纹理绘制游戏元素,还使用了ShapeRenderer来绘制几何形状,如矩形、圆形等,用于创建简单的UI元素...