1

我正在 Jython 中编写代码,它将把一张图片的一部分复制到一张空图片中,但我希望它在下一行中复制(比方说)少 10 个像素。我觉得我说的没有道理,我举个例子来解释。一张 100 像素乘 100 像素的图片,程序会将第一行(100 像素)像素复制到新图片中,但是对于第二行像素,我希望它只复制 90 像素,然后是第三行 80 像素,依此类推在。

在这里,我有一个代码可以复制图片的一部分,但它复制了一个正方形。那么我应该添加什么来让它做我想做的事。我猜我应该对它做点什么,for x in range但我不知道是什么。

def copyPic():
  file=pickAFile()
  oldPic=makePicture(file)
  newPic=makeEmptyPicture(getWidth(oldPic),getHeight(oldPic))
  xstart=getWidth(oldPic)/2
  ystart=getHeight(oldPic)/2
    for y in range(ystart,getHeight(oldPic)):
       for x in range(xstart, (getWidth(oldPic))):
         oldPixel=getPixel(oldPic,x,y)
         colour=getColor(oldPixel)
         newPixel=getPixel(newPic,x,y)
         setColor(newPixel,colour)
  explore(newPic)
4

2 回答 2

1

您的代码看起来肯定会复制图像的右下角 1/4 ... 以制作您需要减少的那部分的三角形部分(或者如果我正确理解您的问题,则只是一个有角度的部分)每次通过的 X 最大值...类似于:

def copyPic():
  file=pickAFile()
  oldPic=makePicture(file)
  newPic=makeEmptyPicture(getWidth(oldPic),getHeight(oldPic))
  xstart=getWidth(oldPic)/2
  ystart=getHeight(oldPic)/2

  # The next line gets the max value x can be (width of pic)
  xmax = getWidth(oldPic)

    for y in range(ystart,getHeight(oldPic)):

       # Now loop from the middle (xstart) to the end (xmax)
       for x in range(xstart, xmax):

         oldPixel=getPixel(oldPic,x,y)
         colour=getColor(oldPixel)
         newPixel=getPixel(newPic,x,y)
         setColor(newPixel,colour)

       # Now the x-loop has finished for this line (this value of y)
       # so reduce xmax by 10 (or whatever value) ready for the next line
       xmax = xmax - 10

       # Then you should do some checking in your code to ensure
       # xmax is not < xstart... here is something crude that should work
       if xmax < xstart:
           xmax = xstart

  explore(newPic)

我认为您的代码将拍摄这样的图像:

+------------+
|   1     2  |
|            |
|   3     4  |
|            |
+------------+

并给出这个:

+-----+
|  4  |
|     |
+-----+

因为你的 X 循环总是相同的长度

如图所示,通过每次减少 x,您应该得到如下结果:

+-----+
|  4 /
|  /
+-

这不是很好的编码,我可以重写整个事情......但如果你只是学习python,那么至少我对你的代码所做的修改应该可以很好地与你已经拥有的东西一起工作,并且应该很容易理解。我希望它有所帮助,如果您需要,请随时要求澄清。

干杯

PS:我看到你问了两次 - 你不应该两次问同一个问题,因为它会分裂答案,并且让人们以后更难找到这样的答案......

于 2013-01-15T04:20:11.827 回答
0

混淆 QR 扫描仪的一种简单方法是用随机单元格替换代码的三个定位方块。这已经完成image3.png,这是最小的形式。您的函数addSquares(smallPic)将添加三个定位方块和将它们与活动单元格分开的白色单元格。然后fixCodes()将展开生成的图像并保存。

于 2019-07-06T07:50:31.250 回答