vanlove123 2021-03-17 00:28 采纳率: 20%
浏览 230
已采纳

python画图游戏

python制作成界面,画一个800*800的格子,分成800*800个像素,然后鼠标作为1*1像素的画笔,。点一个像素就画一个1*1px的方格

如:

 

 

 

类似B站的夏日绘板

https://live.bilibili.com/pages/1702/pixel-drawing

 

  • 写回答

2条回答 默认 最新

  • ProfSnail 2021-03-17 00:48
    关注
    import cv2
    import random
    import numpy as np
    img = np.ones([800,900,3])*255
    idx = 0
    
    colors = [[0,0,255], [0,255,0], [255,0,0], [255, 255, 0], [255, 0, 255], [0, 255, 255], [255, 255, 255], [0, 0, 0]]
    for x in range(0, 800, 100):
    	img[x:x+100, 800:900, :] = colors[idx]
    	idx += 1
    
    color = random.choice(colors)
    pixelSize = 20
    def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
    	global color
    	if event == cv2.EVENT_LBUTTONDOWN:
    		if x < 800:
    			x -= x % pixelSize
    			y -= y % pixelSize
    			cv2.rectangle(img, (x,y), (x+pixelSize-1,y+pixelSize-1), color, -1)
    			cv2.imshow("image", img)
    		else:
    			color = img[y,x,:]
    
    cv2.namedWindow("image")
    cv2.setMouseCallback("image", on_EVENT_LBUTTONDOWN)
    cv2.imshow("image", img)
    cv2.waitKey(0)
    

    被自己笑死。。

    =======================================================

    代码更新V1.2。

    因为觉得这个很有趣,就又写了一个版本,现在支持点右键就进入连笔模式了。

    import cv2
    import random
    import numpy as np
    img = np.ones([800,900,3])*255
    idx = 0
    
    colors = [[0,0,255], [0,255,0], [255,0,0], [255, 255, 0], [255, 0, 255], [0, 255, 255], [255, 255, 255], [0, 0, 0]]
    for x in range(0, 800, 100):
    	img[x:x+100, 800:900, :] = colors[idx]
    	idx += 1
    
    color = random.choice(colors)
    pixelSize = 20
    
    continueStarted = False
    def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
    	global color
    	global continueStarted
    	if event == cv2.EVENT_RBUTTONDOWN:
    		continueStarted = not continueStarted
    	if (event == cv2.EVENT_MOUSEMOVE and continueStarted) or event == cv2.EVENT_LBUTTONDOWN:
    		if x < 800:
    			x -= x % pixelSize
    			y -= y % pixelSize
    			cv2.rectangle(img, (x,y), (x+pixelSize-1,y+pixelSize-1), color, -1)
    			cv2.imshow("image", img)
    		else:
    			color = img[y,x,:]
    
    cv2.namedWindow("image")
    cv2.setMouseCallback("image", on_EVENT_LBUTTONDOWN)
    cv2.imshow("image", img)
    
    cv2.waitKey(0)
    

    鼠标左键绘制一个像素点,鼠标右键开始连续绘图,再按一下右键停止连笔模式。

    移动到最右边的有色图块,并左键,可以选择颜色。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?