从python中的NSImage中提取位图数据

时间:2011-02-23 01:37:45

标签: python wxpython nsimage appkit

我正在使用来自NSImage的数据构建wx.MemoryDC,但结果代码非常缓慢。在我看来, TIFFRepresentation - > ImageFromStream 步骤是减慢速度的步骤。有没有办法避免这一步(所有这些流),并直接从NSImage数据初始化MemoryDC?以下是示例代码:

import wx
import cStringIO
from AppKit import NSImage

app = wx.PySimpleApp()
frame = wx.Frame(None, wx.ID_ANY, "Python")
static_bitmap = wx.StaticBitmap(frame,wx.NewId(), bitmap=wx.EmptyBitmap(640, 480))
frame.Show(True)


# wget http://upload.wikimedia.org/wikipedia/commons/d/d9/Test.png
ns_image = NSImage.alloc().initWithContentsOfFile_("Test.png")

for i in range(100):

    tiffdata = ns_image.TIFFRepresentation()

    image = wx.ImageFromStream(cStringIO.StringIO(tiffdata), wx.BITMAP_TYPE_TIF)

    bitmap = image.ConvertToBitmap()

    bmdc = wx.MemoryDC(bitmap)

    # bmdc.DrawCircle(10,10, 5)
    del bmdc
    static_bitmap.SetBitmap(bitmap)


app.MainLoop()

2 个答案:

答案 0 :(得分:2)

尝试使用:

bitmap = wx.BitmapFromBuffer(...)

而不是ImageFromStream

答案 1 :(得分:1)

回答我自己的问题:NSIimage的接口本质上很慢,唯一可行的解​​决方案是完全避免它。