Bir görüntünün bir alanındaki tüm pikselleri "yakalama" (ekrana çizilen dikdörtgen nesnesinin genişliği ve yüksekliği ile belirlenen alan) ve yeni bir görüntü oluşturmaya çalışıyorum Orijinal görüntüden yakalanan pikselleri içeren.Pikselleri yakalayın ve yeni resim oluşturun
Sorun şu ki, çalıştırdığımda indeksin aralık dışı/koordinat sınırları dışına çıkarılmasıdır. Bir chord_pixels dizisinin uzunluğunu (dikdörtgenin genişliği ile aynı olması gereken satır sayısını elde etmek için) ve chord_pixels [0] uzunluğunu yazdırmayı denedim (aynı olması gereken sütun sayısını elde etmek için) Dikdörtgenin yüksekliği olarak) ve bunların çoğu zaman yeni görüntünün yüksekliğinden ve genişliğinden çok farklı olduğu ortaya çıkıyor (piksellerin geldiği dikdörtgenle aynı boyutta). Fark genellikle 100'den fazladır. Bunu saatlerce gözetledim ve çok aptal olanlar da dahil olmak üzere bir ton fikirleri denedim. Şimdi bunu internete teklif ediyorum.
img = Icon("name")
d = Display("name", 1000, 1000)
img.setSize(1000,1000)
d.add(img)
beginX,beginY,endX,endY = 0,0,0,0
chord_pixels = []
rect = Rectangle(0,0,0,0)
def beginRectangle(x,y):
global beginX, beginY
...
beginX, beginY = x, y
def drawRectangle(x,y):
global beginX, beginY, endX, endY, rect
...
if rect in d.getItems():
d.remove(rect)
endX, endY = x,y
rect = Rectangle(beginX, beginY, endX, endY, Color.BLACK, False, thickness=3)
d.add(rect)
def endRectangle(x,y):
global beginX, beginY, endX, endY, img
...
getPixelsInRectangle(img, beginX, beginY, endX, endY)
def getPixelsInRectangle(image, x1, y1, x2, y2):
global chord_pixels
row_pixels = []
chord_pixels = []
for y in range(y1,y2):
for x in range(x1, x2):
pixel = img.getPixel(int(y),int(x)) #getPixel(col, row)
row_pixels.append(pixel)
chord_pixels.append(row_pixels)
row_pixels = []
def captureChordPixels(key):
global chord_pixels, rect
chordWindow = Image(rect.getWidth(), rect.getHeight())
for col in range(chordWindow.getHeight()):
for row in range(chordWindow.getWidth()):
chordWindow.setPixel(col, row, chord_pixels[col][row])
d.onMouseDown(beginRectangle)
d.onMouseDrag(drawRectangle)
d.onMouseUp(endRectangle)
d.onKeyDown(captureChordPixels)
Açık olmak gerekirse, yapmak istediğiniz tüm w, orijinal görüntüden verilen x bir alt görüntü elde alt görüntünün h y? – Keatinge