将过滤器限制为可见屏幕 - Actionscript 3

发布于 2024-08-01 15:21:51 字数 582 浏览 1 评论 0原文

我目前正在 FlexSDK/AS3 中工作,并且有一个包含许多对象的画布。 画布很大 - 大约 4K x 4K 像素,我做了很多缩放/缩放/滚动操作。 视口只有 800x450 左右。

我正在尝试将模糊滤镜应用到画布上 - 我已经弄清楚了,它工作得很好,除了这个小错误:

如果生成的图像超过最大尺寸,则不会应用滤镜。 在 AIR 1.5 和 Flash Player 10 中,宽度或高度的最大值为 8,191 像素,像素总数不能超过 16,777,215 像素。 (因此,如果图像的宽度为 8,191 像素,则高度只能为 2,048 像素。)在 Flash Player 9 及更早版本和 AIR 1.1 及更早版本中,高度限制为 2,880 像素,宽度限制为 2,880 像素。 例如,如果您在应用了滤镜的情况下放大较大的影片剪辑,则当生成的图像超过最大尺寸时,滤镜将被关闭。 -- AS3 文档

当我缩小时,我的过滤器工作正常。 但放大后,像素限制被打破,滤镜无法工作。

由于我只需要模糊屏幕当前可见的部分 - 800x450 切片 - 有什么方法可以选择性地仅模糊屏幕的该部分?

I'm currently working in FlexSDK/AS3 and have a canvas containing many objects. The canvas is large - around 4K x 4K pixels, and I do a lot of scaling/zooming/scrolling about. The viewport is only around 800x450.

I'm trying to apply a blur filter to the canvas - which I have figured out and it works fine, except for this one little bug:

A filter is not applied if the resulting image exceeds the maximum dimensions. In AIR 1.5 and Flash Player 10, the maximum is 8,191 pixels in width or height, and the total number of pixels cannot exceed 16,777,215 pixels. (So, if an image is 8,191 pixels wide, it can only be 2,048 pixels high.) In Flash Player 9 and earlier and AIR 1.1 and earlier, the limitation is 2,880 pixels in height and 2,880 pixels in width. If, for example, you zoom in on a large movie clip with a filter applied, the filter is turned off if the resulting image exceeds the maximum dimensions. -- AS3 docs

When I zoom out my filter works fine. But while zoomed in, the pixel limitation is broken and the filter fails to work.

Since I only need the currently visible section of the screen to blur - the 800x450 slice - is there any way to selectively blur only that portion of the screen?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

听风念你 2024-08-08 15:21:51

我认为您不能指定 DisplayObject 的区域来应用过滤器。 要么全有,要么全无。

画布上的内容有多复杂? 元素是交互的吗? 你能把它们分成更小的矩形并将它们放入网格中吗?

如果它只是一个图像或一组图像,您可以将可视部分复制到 BitmapData 对象。 您将隐藏大画布并仅使用位图对象显示位图数据。 您可以向缩放和滚动事件添加侦听器,然后在必要时更新 BitmapData 和 Bitmap。

如果它是一组交互式控件,我认为最好的选择是将它们组成一个网格。 然后,您可以对网格中的所有单元格应用模糊(每个单元格的尺寸较小)。

请注意,模糊这么多像素将是真正的性能消耗!

I don't think you can assign a region of a DisplayObject to apply a filter to. It is all or nothing.

How complex are the contents of the canvas? Are the elements interactive? Can you split them into smaller rectangles and place them into a grid?

If it is just an image or group of images, you could copy the viewable portion into a BitmapData object. You would hide the large canvas and only display the bitmap data using a Bitmap Object. You could add a listener onto zoom and scroll events and then update the BitmapData and Bitmap when necessary.

If it is a group of interactive controls I think your best option is to compose them into a grid. You could then apply a blur to all of the cells in the grid (each being a smaller size).

Be aware that blurring that many pixels will be a real performance hog!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文