Извлечение растровых данных из NSImage в python - PullRequest
0 голосов
/ 23 февраля 2011

Я создаю wx.MemoryDC, используя данные из NSImage, но полученный код очень вялый. Мне кажется, что шаг TIFFRepresentation -> ImageFromStream замедляет процесс. Есть ли способ избежать этого шага (все это потоковое) и инициализировать MemoryDC непосредственно из данных NSImage? Вот пример кода:

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 ]

2 голосов
/ 18 апреля 2011

Попробуйте использовать:

bitmap = wx.BitmapFromBuffer(...)

вместо ImageFromStream.

1 голос
/ 13 августа 2011

Отвечая на мой собственный вопрос: интерфейс к NSIimage по своей сути медленный, единственное работоспособное решение - полностью его избежать.

...