我正在使用python-杂波1.0
以挑战的形式我的问题,
编写代码,通过按下一个键,允许缩放到CairoTexture参与者,这样每个参与者都可以重新绘制(由cairo绘制),以便图像保持高分辨率,但仍然按预期缩放,而不需要重新调整参与者的大小。
想想像Inkscape这样的东西,以及如何放大矢量,在任何放大情况下,向量是如何保持干净的。将路径(例如,大量cairo line_to命令)放置到CairoTexture参与者上,然后允许发生相同的操作。
更详细的
我的目标是一个小型的SVG编辑器,它使用了一组演员。每个演员都致力于一条道路。我使用SomeGroup.set_depth(z)‘缩放’,然后使z变大/变小。目前为止一切都很好。然而,演员越接近镜头,纹理就越适合他们的新的表观尺寸。
我似乎想不出办法让克劳特同时做这两件事:
。
如果我使用set_size或set_surface_size,参与者会变得更大,这不是我想要的。我只希望它的表面(底层数据)变得更大。
(我不确定这方面的术语,可能是mipmapping吗?)
换句话说:多边形越来越大,增加它的纹理数组的大小,这样它就可以映射到较大的多边形上。
我甚至尝试了在杂乱的周围运行,保持第二个表面(使用pycairo),我重新创建到演员的表面大小(get_transformed_size),然后我使用杂波的set_from_rgb_data并将它指向我的第二个表面,强制调整表面的大小,而不是演员的尺寸。
这样做的问题是:(A)杂乱忽略了新的大小,只吸引到旧的宽度/高度;(B) RGBA对ARGB32之类的东西会导致颜色熔毁。
我愿意接受任何其他的想法,我希望我站在树林里,错过了所有的树木!
二.D
发布于 2010-07-06 09:39:42
好吧,尽管我的测试和黑客攻击,它一直在我的眼皮底下。
多亏了杂乱项目列表上的尼尔,以下是独家新闻:
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
https://stackoverflow.com/questions/3176011
复制相似问题