首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在重新绘制时放大到杂波CairoTexture

在重新绘制时放大到杂波CairoTexture
EN

Stack Overflow用户
提问于 2010-07-04 19:56:56
回答 1查看 572关注 0票数 2

我正在使用python-杂波1.0

以挑战的形式我的问题,

编写代码,通过按下一个键,允许缩放到CairoTexture参与者,这样每个参与者都可以重新绘制(由cairo绘制),以便图像保持高分辨率,但仍然按预期缩放,而不需要重新调整参与者的大小。

想想像Inkscape这样的东西,以及如何放大矢量,在任何放大情况下,向量是如何保持干净的。将路径(例如,大量cairo line_to命令)放置到CairoTexture参与者上,然后允许发生相同的操作。

更详细的

我的目标是一个小型的SVG编辑器,它使用了一组演员。每个演员都致力于一条道路。我使用SomeGroup.set_depth(z)‘缩放’,然后使z变大/变小。目前为止一切都很好。然而,演员越接近镜头,纹理就越适合他们的新的表观尺寸。

我似乎想不出办法让克劳特同时做这两件事:

  1. 使演员的实际大小保持静态(即开始时的大小),
  2. 将其底层交换成较大的(放大后),然后我可以将路径重新绘制到(并使用开罗矩阵执行上下文的缩放)

如果我使用set_sizeset_surface_size,参与者会变得更大,这不是我想要的。我只希望它的表面(底层数据)变得更大。

(我不确定这方面的术语,可能是mipmapping吗?)

换句话说:多边形越来越大,增加它的纹理数组的大小,这样它就可以映射到较大的多边形上。

我甚至尝试了在杂乱的周围运行,保持第二个表面(使用pycairo),我重新创建到演员的表面大小(get_transformed_size),然后我使用杂波的set_from_rgb_data并将它指向我的第二个表面,强制调整表面的大小,而不是演员的尺寸。

这样做的问题是:(A)杂乱忽略了新的大小,只吸引到旧的宽度/高度;(B) RGBA对ARGB32之类的东西会导致颜色熔毁。

我愿意接受任何其他的想法,我希望我站在树林里,错过了所有的树木!

二.D

EN

回答 1

Stack Overflow用户

发布于 2010-07-06 09:39:42

好吧,尽管我的测试和黑客攻击,它一直在我的眼皮底下。

多亏了杂乱项目列表上的尼尔,以下是独家新闻:

代码语言:javascript
复制
CT = SomeCairoTextureActor()

# record the old height, once:
old_width, old_height = CT.get_size()

Start a loop:
# Do stuff to the depth of CT (or it's parent)
...

# Get the apparent width and height (absolute size in pixels)
appr_w,appr_h = CT.get_transformed_size()

# Make the new surface to the new size
CT.set_surface_size( appr_w, appr_h )

# Crunch the actor back down to old size 
# but leave the texture surface something other!
CT.set_size(old_width, old_height)

loop back again

演员的表面尺寸和尺寸不一定是一样的。表面大小在默认情况下只是演员的首选大小。只需设置参与者的大小,就可以覆盖首选的大小。如果参与者的大小与表面大小不同,那么纹理将被压缩以适应演员的大小(我认为这是您想要的)。

很高兴把这个小秘密放到床上去。谢谢乱糟糟的名单!

二.D

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3176011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档