<p>请注意,由于<code>greenScoreList[gfindex]</code>的值将是一个整数,<code>greenfishes[gfindex].image</code>的大小比将在原始图像(如您所述)不是正方形的情况下扭曲。在</p>
<p>您的原始尺寸是24 x 8像素,这将产生一个高宽比正好为3:1的未失真图像。在第一张图片中,尺寸是74×58px(或24+50×8+50;<code>50</code>来自<code>greenScoreList[gfindex]</code>),其比率约为14:11(1.276:1),并且已经严重失真。在你发布的下一张图片中,它的像素增加到84 x 68像素,比上一张增加了10倍,使其比例进一步扭曲到大约(21:17,或1.235:1)。在</p>
<p>简而言之,在每个轴的大小上增加一个值将使原始图像变得越来越方形,从而使其扭曲得越来越严重。你可能想做的是将每个维度的大小乘以一个基于分数的因子,而不是分数所代表的固定值。考虑:</p>
<pre><code>for greenFish in greenfishes:
gfindex = greenfishes.index(greenFish)
greenScoreList[gfindex] = 50 # The score for this greenFish can stay as fifty...
imagescale = 1 + (greenScoreList[gfindex] / 25.0)
# ...but the score needs to be converted to a factor instead of a hard value...
greenfishes[gfindex].image = pygame.transform.scale(greenfishes[gfindex].image, (int(greenWidth * imagescale), int(greenHeight * imagescale)))
# The fish's incoming dimensions are rescaled according to a resizing factor, based on its score! The result still has to be an integer.
</code></pre>
<p>在本例中,我选择将分数除以25.0,以保持鱼的放大程度与您所展示的尺寸增加(分数为50时,鱼的宽度约为0的三倍),但因素取决于您。乘以尺寸而不是增加尺寸将保持原始图像的纵横比(加上或减去一两个像素),并保持图像看起来干净!在</p>
<p>我还应该指出,串行转换几乎肯定会导致<a href="http://en.wikipedia.org/wiki/Generation_loss" rel="nofollow">generation loss</a>,即使是几次放大。您可能希望将转换线替换为以下内容,以防止这种失真:</p>
^{pr2}$
<p>…它使用全局库中原始greenfish图像的副本,而不是重新缩放“过时”图像。在</p>
<p>尽可能多地转换原始图像的副本,而不是进行复合转换,以尽量减少每个修订创建的转换工件的数量。只是要确保你没有(无意中)改变了原稿!在</p>