PyGame / CPU負荷
投稿日: May 26, 2019 5:52:51 PM
PyGameでコア1つ分のCPUがほぼ100%になる。
Chip-8もそうなのでそういうもんかなーと思いつつ色々試したところおそらく1/4くらいに出来る方法が分かったのでメモ。
なにはともあれ 0.01秒くらいノンブロッキングウェイト中にSleepする こと。
わかってしまえばどうということのない話なのだけども…。
PyGameは初心者さんも多く使ってるのでなかなかね。
pygに反映しておきました。
画像をソースコードに変換するのを作った。
img2src.py
#!/usr/bin/python3
import pyg
import argparse
p = argparse.ArgumentParser()
p.add_argument("inputFile")
p.add_argument("outputFile")
args = p.parse_args()
fileName = args.inputFile
outFileName = args.outputFile
pyg.begin((128,128),(256,256))
f = pyg.TinyFont()
f.print("load img:" + fileName,(0,0))
pyg.update()
img = pyg.imgLoad(fileName)
pyg.putImg(img,(0,6))
pyg.update()
f.print("WIDTH : " + str(img.get_width()),(0,6))
f.print("HEIGHT : " + str(img.get_height()),(0,12))
pyg.update()
buf = img.get_buffer()
rawData = buf.raw
f.print("dataSize: " + str(len(rawData)),(0,18))
fp = open(outFileName,"w")
fp.write("data=bytes([\n\t")
lineCount = 0
for d in rawData:
fp.write( hex(d) + "," )
lineCount += 1
if lineCount == 8:
lineCount = 0
fp.write("\n\t")
fp.write("])\n")
fp.close()
f.setColor((255,0,0))
f.print("..Done",(0,24))
while pyg._running:
pyg.process()
pyg.quit()
これで画像をソースに埋め込みだ。みたいなことを考えていたんだけども、なんか…。
ソースコードじゃなくて素直にバイナリにしたほうがよかったかもしれない。
どっちにしても元がpngとかだとソースにしてもバイナリにしても大きくなってしまうので容量的には不利なのよね。
思いつきだけど。
横幅の決まったpng画像に様々なデータを詰め込むようなものを作るというのも面白いかもしれない。
画像も元の状態ではなくなってパット見ではわからなくなったり、テキストデータなんかも埋め込んじゃったり。
pngファイルシステムみたいな。
面白いのでちょっと考えてみようかな。