【问题标题】:Python PIL Image.tostring()Python PIL Image.tostring()
【发布时间】:2011-07-21 02:46:37
【问题描述】:

我是 Python 和 PIL 的新手。我正在尝试遵循代码示例,了解如何通过 PIL 将图像加载到 Python 中,然后使用 openGL 绘制其像素。下面是一些代码:

from Image import *
im = open("gloves200.bmp") 
pBits = im.convert('RGBA').tostring()

.....

glDrawPixels(200, 200, GL_RGBA, GL_UNSIGNED_BYTE, pBits)

这将在画布上绘制一个 200 x 200 的像素块。然而,这不是预期的图像——它看起来像是从随机存储器中绘制像素。随机记忆假设得到以下事实的支持:即使我尝试绘制完全不同的图像,我也会得到相同的图案。有人可以帮我吗?我在 Windows XP 上使用 Python 2.7 和 2.7 版本的 pyopenGL 和 PIL。

【问题讨论】:

    标签: python python-imaging-library pyopengl


    【解决方案1】:

    我认为你很接近。试试:

    pBits = im.convert("RGBA").tostring("raw", "RGBA")
    

    图像首先必须转换为 RGBA 模式才能使 RGBA 原始模式打包程序可用(请参阅 libimaging 中的Pack.c)。您可以检查 len(pBits) == im.size[0]*im.size[1]*4,对于您的gloves200 图像,它是 200x200x4 = 160,000 字节。

    【讨论】:

    • 太棒了。谢谢你。 -亚伦
    【解决方案2】:

    你试过直接在tostring函数中使用转换吗?

    im = open("test.bmp")
    imdata = im.tostring("raw", "RGBA", 0, -1)
    w, h = im.size[0], im.size[1]
    glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, imdata)
    

    替代使用兼容版本:

     try:
          data = im.tostring("raw", "BGRA")
     except SystemError:
          # workaround for earlier versions
          r, g, b, a = im.split()
          im = Image.merge("RGBA", (b, g, r, a))
    

    【讨论】:

    • 当我运行你的代码 sn-p 时,.tostring 函数给了我这个错误“return apply(encoder, (mode,) + args + extra) SystemError: unknown raw mode”。
    • 将在java2s.com/Open-Source/Python/GUI/Python-Image-Library/… 找到的解决方法添加到我上面的sn-p
    • 感谢您的解决方法。什么是兼容性问题。我是否在较新版本的库上运行旧示例代码?
    【解决方案3】:

    感谢您的帮助。感谢 mikebabcock 更新了 Web 上的示例代码。感谢 eryksun 提供的代码 sn-p——我在代码中使用了它。

    我确实发现了我的错误,这是 Python newb 错误。哎哟。我在模块中的任何函数范围之外声明了一些变量,并且天真地认为我正在修改它们在函数内的值。当然,这不起作用,所以我的 glDrawPixels 调用实际上是在绘制随机内存。

    【讨论】:

    • 我只从 PIL 导入了 Image 类。现在我在执行时没有收到错误: pBits=im.convert('RGBA').tostring() 我不知道为什么。什么有命名空间冲突? tostring() 是某种全局函数还是定义在某个类层次结构的顶部?
    猜你喜欢
    • 2012-08-03
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2012-02-21
    • 2015-11-29
    • 2015-04-19
    • 2021-09-01
    相关资源
    最近更新 更多