Дизерин в Python
Я пишу простой скрипт для дизеринга в python 3.4, используя pygame и numpy. Я уже сделал это при обработке без проблем, но я получаю плохие результаты с Python.
Это мой скрипт на Python и вот результаты, которые я получаю
from pygame import display, surfarray, image
import pygame
from pygame.locals import Color
import numpy as np
factor = 3
pygame.init()
imagen = image.load("download.jpg") #Pygame Surface
imagen_pix = surfarray.array3d(imagen)
width, height = imagen.get_width(),imagen.get_height()
screen = display.set_mode((width*2,height))
for y in range(height-1):
for x in range(width-1):
oldR, oldG, oldB = imagen_pix[x][y]
newR = round((factor-1)*oldR/255.0)*(255.0/(factor-1))
newG = round((factor-1)*oldG/255.0)*(255.0/(factor-1))
newB = round((factor-1)*oldB/255.0)*(255.0/(factor-1))
imagen_pix[x][y] = (newR, newG, newB)
errR = oldR-newR
errG = oldG-newG
errB = oldB-newB
r, g, b = imagen_pix[x+1][y]
r += errR*7.0/16.0
g += errG*7.0/16.0
b += errB*7.0/16.0
imagen_pix[x][y] = (r, g, b)
r, g, b = imagen_pix[x-1][y+1]
r += errR * 3.0 / 16.0
g += errG * 3.0 / 16.0
b += errB * 3.0 / 16.0
imagen_pix[x][y] = (r, g, b)
r, g, b = imagen_pix[x][y+1]
r += errR * 5.0 / 16.0
g += errG * 5.0 / 16.0
b += errB * 5.0 / 16.0
imagen_pix[x][y] = (r, g, b)
r, g, b = imagen_pix[x + 1][y+1]
r += errR * 1.0 / 16.0
g += errG * 1.0 / 16.0
b += errB * 1.0 / 16.0
imagen_pix[x][y] = (r, g, b)
imagenNueva = surfarray.make_surface(imagen_pix)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.blit(imagen, (0, 0))
screen.blit(imagenNueva, (width, 0))
display.update()
pygame.quit()
В чем проблема с моим скриптом Python?