我在Pygame中有一些透明背景的表面.它们的大小都一样.但是每个圆上都绘制了一个不同大小的圆圈,因此圆圈并不完全适合图像.下面是一些示例图像(我在Photoshop中截取了截图,因此您可以清楚地看到图像的透明度和大小):

现在我想删除图像周围的透明边框,使圆圈完全适合图像.我不希望表面呈圆形,我不认为这是可能的,但我希望表面左侧和右侧没有空白列,顶部没有空白行和底部.想要的结果:

曲面上的圆每帧都会改变大小,因此我必须每帧重新计算新曲面.
我已经谷歌了,但我还没有找到任何关于Pygame表面的东西.我也尝试制作自己的功能,但它看起来很丑陋而且更糟糕:帧率从50(如果我不调用函数)下降到30 fps(如果我调用该函数).我测试了一下,我发现较小的圆圈比较大的圆圈需要更长的处理时间.我怎么能这样做,但速度更快.如果你想我可以展示我所做的功能.
文档说“对于aapolygon,使用 aalines 与 \xe2\x80\x98\xe2\x80\x99 参数。”,但 pygame.draw.aalines 不允许我指定宽度(0 = 填充),使其成为不填充表面。这看起来很糟糕:\n
这些圆圈看起来好多了:
\n\n
我怎样才能做到这一点?
\n\n我使用二次贝塞尔曲线生成表面,其坐标被附加到列表中。然后我像这样将其绘制到表面上(在上图中我做了两次,一次用于外圆,一次用于内圆):
\n\npygame.draw.polygon(self.image,fclr,self.points)\nRun Code Online (Sandbox Code Playgroud)\n\n以及绘图代码(shape.image与上面代码中的self.image是同一个表面):
\n\nscreen.fill((0,0,0))\nscreen.blit(shape.image,(100,100))\npygame.display.flip()\nRun Code Online (Sandbox Code Playgroud)\n 我对Java不太熟悉,所以这可能是一个nooby问题。我尝试使用Java加密进行一些实验,但是由于某种原因,我无法获得的实例Cipher。我总是NoSuchPaddingException在这行上,将填充更改为其他内容,如"/NoPadding"行不通:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
Run Code Online (Sandbox Code Playgroud)
即使Eclipse表示错误,尝试运行代码也会导致以下错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Unhandled exception type NoSuchAlgorithmException
Unhandled exception type NoSuchPaddingException
at Encryption.main(Encryption.java:10)
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢?我必须导入某些东西吗?在当前代码中,我import javax.crypto.Cipher和javax.crypto.spec.SecretKeySpec。
当我使用Jython时,代码会顺便工作。
我需要找到图像中所有闭合的形状并获取其坐标。我在Python中需要这个,但是对如何做到这一点的解释也足够了。如果需要,请随时使用Python代码回答。我已经在Google上进行了大量搜索,发现了以下两点:
第一个链接中的答案会绘制所有区域,而不是为我提供封闭区域的坐标。我不理解第二个链接中的第一个答案,有些评论说它不起作用。第二个链接中的第二个答案不适用于这样的图像:

我也尝试制作自己的代码,但是计算所需的时间超过一秒,并且必须更快(不是真的,不是真的快,但至少要快于1/10秒)。
我如何找到这些区域?
PS:图像中有些线条不是闭合形状的一部分。
python ×3
pygame ×2
aes ×1
antialiasing ×1
border ×1
encryption ×1
image ×1
java ×1
performance ×1
polygon ×1
shape ×1