numpy.memmap到Image.frombuffer - 没有复制

时间:2015-09-17 21:18:54

标签: python python-2.7 numpy python-imaging-library

我试图将在另一个进程中创建的文件映射到内存,以用作共享帧缓冲区。我不想复制数据,因为我想使用PIL ImageDraw函数来操作映射缓冲区,然后刷新更改。我对python和内存映射文件相当新。我错过了什么?

# This is my setup code that creates a memory mapped array - seems to work
buf = np.memmap('/tmp/shared_mem', mode="readwrite", dtype="uint32", shape=(60,60))

# Here I build a PIL Image from the memory mapped data and correct layout, etc...
img = Image.frombuffer('RGBA', (60, 60), buf)
dr = ImageDraw.Draw(img)

# Changes using ImageDraw or putpixel do not show in the mapped file.
dr.rectangle(((0,0), (60,60)), fill="red")
buf.flush()

# Changes using numpy methods work just fine.
buf.fill(0)
buf.flush()

1 个答案:

答案 0 :(得分:1)

我看了frombuffer的{​​{3}}。结果是它将readonly标志设置为1。我不确定副作用,但如果你将标志设置为零,你的代码就可以了:

buf = np.memmap(fname, mode="readwrite", dtype="uint32", shape=(n,n))
buf[:] = 0
img = Image.frombuffer('RGBA', (n, n), buf)
img.readonly = 0
dr = ImageDraw.Draw(img)
dr.rectangle(((0,0), (n,n)), fill="red")
print buf[0,0]
# 4278190335