帮助调试noob代码-将二进制数据转换为图像...

好的,我是一个python菜鸟,到目前为止都还不错,正在研究数据
转换程序,并希望从
一个8位ROM文件.
创建我下降的图像,我打开文件并使用TK绘制
图像...但是
1)它似乎没有结束(闲置),我必须杀死
重试的过程似乎没有关闭(?)
2)我添加图像模块后不会打开我的二进制文件
(抱怨它不是图像文件,不是.)我确定我需要
前缀开放,但我似乎找不到一个示例
言语,
以下是代码(如果很糟糕,因为我主要是
我走时以示例借用...)
感谢.
#!/usr/local/bin/python
从tkinter导入 *
从字符串导入 *
从图像导入 *
root = tk()
root.title('canvas')
#open Commodore CSET ROM
cset = open(" chargen"," r")
帆布=帆布(宽度= 16,高度= 16,bg ='White')
canvas.pack(展开=是,填充=两者)
#角色大小因子
尺寸= 2
#阅读ROM的所有512个字符
对于范围(0,511,1)的CCHAR:
#Draw Line
charline <8:
位置= 0
x = cset.read(1)
ch = ord(x)
#绘制像素
而职位<8:
如果CH&(2 **位置):
XP = 1+(7位)*大小
yp = 1+charline*大小
canvas.create_rectangle(XP,YP,XP+大小,YP+大小,
填充='黑色',宽度= 0)
位置 += 1
charline += 1
#save字符图像
outfile ="/home/mydir/work/char"+zfill(CCHAR,3)+".png"
canvas.save(Outfile," PNG")
#Clear Canvas for Next Char ...
canvas.create_rectangle(1,1,尺寸*8,大小*8,fill ='White',宽度= 0)
root.mainloop()

# 回答1


在6月29日,11:18*AM,LA ...@Portcommodore.com写道:
不要那样做...
您正在将所有内容导入当前名称空间,这会破坏
当前名称空间,特别是内部的"打开"功能
image.open将阴影内置的"打开"功能.
利用:
导入tkinter
导入字符串
导入图像
在某些用例中,"从blah incort *"很有用,这样
作为导入常数,但通常试图避免导入
到当前名称空间的所有内容.
如果使用"导入tkinter",则必须将该代码更改为:
root = tkinter.tk()
因为您从图像中遮盖了内置的"打开"
*',这将调用image.open而不是内置打开.
如果使用"导入tkinter",则必须将该代码更改为:
canvas = tkinter.canvas(...)
您可以使用此方法:
对于范围(511)的CCHAR:
但是要当心,这会以长度为511创建范围(原始
范围),这意味着您在最后一个字符上缺乏空间.
您可能想要这个:
对于CCHAR范围(512):
但是,同样,Python可以直接通过字符串/列表/文件等循环,等等
这可能是最好的:
对于Char in CSET.Read():
由于您打算使用图像模块(来自pil/python成像
库)为什么不使用图像中的函数来创建图像.
您使用的文件的格式似乎是原始格式(即
简单的未压缩位图,没有任何形式 标题的S).这意味着
image.fromstring()应该起作用.
# 回答2


在6月29日,4:47*pm,撒谎 不要那样做...
您正在将所有内容导入当前名称空间,这会破坏
当前名称空间,特别是内部的"打开"功能
image.open将阴影内置的"打开"功能.
利用:
导入tkinter
导入字符串
导入图像
在某些用例中,"从blah incort *"很有用,这样
作为导入常数,但通常试图避免导入
到当前名称空间的所有内容.
如果使用"导入tkinter",则必须将该代码更改为:
root = tkinter.tk()
因为您从图像中遮盖了内置的"打开"
*',这将调用image.open而不是内置打开.
如果使用"导入tkinter",则必须将该代码更改为:
canvas = tkinter.canvas(...)
您可以使用此方法:
对于范围(511)的CCHAR:
但是要当心,这会以长度为511创建范围(原始
范围),这意味着您在最后一个字符上缺乏空间.
您可能想要这个:
对于CCHAR范围(512):
但是,同样,Python可以直接通过字符串/列表/文件等循环,等等
这可能是最好的:
对于Char in CSET.Read():
由于您打算使用图像模块(来自pil/python成像
库)为什么不使用图像中的函数来创建图像.
您使用的文件的格式似乎是原始格式(即
简单的未压缩位图,没有任何类型的标题).这意味着
image.fromstring()应该起作用.
顺便说一句,PIL手册是Python成像的好教程/参考
库:http://www.pythonware.com/library/pi...book/index.htm
有关RAW模式的信息:http://www.pythonware.com/library/pi...ok/decoder.htm(_@_ _)
太好了,谢谢!今天晚上会尝试他们.
图像模块语法看起来更像我所期望的
tkinter.我昨天发现的所有在线绘图示例
tkinter;仅显示图像来操纵预制图像.
拉里
# 回答3


成功,必须用更多的谷歌搜索填充一些空白,以下是
完成的脚本(这次使用全部用于循环,保存了更多
行):
==========
#!/usr/local/bin/python
导入字符串
导入图像,ImageDraw
尺寸= 2
im = image.new(" 1",[8*大小,8*大小],1)
draw = imagedraw.draw(im)
cset = open(" chargen"," r")
对于范围(0,512,1)的CCHAR:
对于范围(0、8、1)中的charline:
x = cset.read(1)
ch = ord(x)
对于范围(0、8、1)的位置:
如果CH&(2 **位置):
xp =(7位)*大小
yp = charline*大小
draw.Rectangle((((((xp,yp),(xp+size-1,yp+size-1))),
填充= 0)
outfile ="/home/mydir/work/char"+string.zfill(cchar,3)+"r.png"
im.Save(Outfile," PNG")
draw.Rectangle((((0,0),(尺寸*8,size*8))),填充= 1)
im.show()
==========
它像我想要的那样执行变量大小,现在肯定会很快.
如果我想显示图像而不保存如何执行此操作,
图像模块不会弹出画布.
底部似乎没有 Ork. 再次感谢!

标签: python

添加新评论