我不完全了解如何正确使用画布与动画图像.
请参阅附件中的片段,我将动画图标加载到图像中并同时执行以下操作:(1)add_widget图像(2)创建一个带纹理=图像纹理的矩形画布指令
图像动画矩形纹理没有
我已经阅读了所有Kivy手册并阅读了Image和Canvas,我认为Image是一个很好的高级类,所有这些图像动画处理和Canvas更像是一个原始的低级绘图画布.
所以这是我的问题 - 在Canvas上处理动画的Kivy正确架构是什么?我看了动画,但这似乎更像矩阵般的动画,如平移,缩放,旋转.
这就是我现在正在做的事情:我有大型地图窗口的游戏,然后帮助窗口中的一堆游戏用户体验游戏用户体验助手窗口我做所有的kivy布局等等并且通常使用图像,所以我的图标很好地动画
但是在游戏地图中,我使用的是canvas:
使用此范例绘制我的所有游戏对象:
r=Rectangle(texture=some_Image.texture)
map.canvas.add(r)
Run Code Online (Sandbox Code Playgroud)
当世界需要重新绘制时:
1) map.canvas.clear()
2)在他们的新位置和状态中绘制所有的东西(为了更快,我应该只跟踪脏对象和位置并且只是绘制它们,但说实话我即使在每个核级别清晰的情况下也会获得梦幻般的fps画)
这当然比创建和销毁数百个小部件类要快得多,重量轻 - 地图画布用于什么 - 对吧?
但问题是我在zip文件中带动画的图标不是动画
问:我认为画布错了吗?我应该为每个游戏对象添加一个图像吗?(并利用所有动画图像支持?)
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.image import Image
from kivy.app import App
from kivy.graphics import Rectangle
class MainApp(App):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.root = RelativeLayout()
# use any zip file of an animated image
self.animated_icon = Image(source='factory_icon.zip')
# If I add an Image, the icon animates
self.root.add_widget(self.animated_icon)
# If I add the Image's texture on to a …
Run Code Online (Sandbox Code Playgroud) *编辑* 不,我没有尝试转换.BMP只需加载PNG并在tk画布中渲染(透明位实际上是透明的.)
目标:使用透明度加载PNG文件的内容,并使用Python3在tkinter Canvas中呈现它们(并使用Pillow支持PIL)
问题:当加载为RGBA时,它们无法在画布中呈现.将它们转换为RGB并将渲染,但当然没有透明度.
环境:安装Mac OSX,Python 3.5并验证Pillow处于3.5路径
注意:CuriosityRover.png确实是一个RGBA,打印语句确认,并使用finder进行验证,显示灰色背景和Photoshop保存网页的透明度.
我试过像这样只提取alpha层:
alpha = img.convert('RGBA').split()[-1]
Run Code Online (Sandbox Code Playgroud)
调用alpha.show()确实向我展示了预览alpha图层,但它无法在画布小部件中呈现.
我还尝试使用ImageOps.invert(alpha)反转alpha图层(在应用反转后通过调用.show()验证,我在预览中看到反向alpha图层.)
我试过像这样创建矩形透明区域:transparent_area =(0,0,300,300)mask = Image.new('L',curosity.size,color = 255)draw = ImageDraw.Draw(mask)draw.rectangle (transparent_area,fill = 0)img.putalpha(mask)
这确实工作创造一个透明的矩形区域,所以它看起来像canvas.create_image 是做工精细的透明度,但不知何故,我无法创建正确的透明度数据的光象.
我有很多堆栈溢出标签打开了一天的过程我很尴尬,我无法弄清楚这一点.
这似乎是世界上最简单的事情.我究竟做错了什么?
import tkinter as tk
from PIL import Image, ImageTk
img = Image.open("./Assets/CuriosityRover.png")
img2 = Image.open("./Assets/CuriosityRover.png").convert('RGB')
img.show() # Shows the image just fine in preview
print(img.format, img.size, img.mode)
root = tk.Tk()
photo = ImageTk.PhotoImage(img) # img fails render, img2 works but no alpha
canvas …
Run Code Online (Sandbox Code Playgroud)