# devil http://www.myevan.net/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-devil-%EB%AA%A8%EB%93%88
import wx
from devil import *
from ctypes import c_ubyte, string_at
class DDSHandler(wx.PyImageHandler):
def __init__(self, *args, **kwargs):
wx.PyImageHandler.__init__(self)
self.SetName("DDS Image")
self.SetExtension("dds")
self.SetType(wx.BITMAP_TYPE_ANI + 1)
self.SetMimeType("image/x-dds")
def GetImageCount(self):
return 1
def LoadFile(self, image, stream, verbose, index):
data = stream.read()
if not ilLoadL(IL_TYPE_UNKNOWN, data, len(data)):
return False
ilConvertImage(IL_BGR, IL_UNSIGNED_BYTE)
image_width = ilGetInteger(IL_IMAGE_WIDTH)
image_height = ilGetInteger(IL_IMAGE_HEIGHT)
image_data = string_at(ilGetData(), image_width * image_height * 3)
image.Destroy()
image.Create(image_width, image_height)
image.SetData(image_data)
return True
def SaveFile(self, image, stream, verbose):
raise NotImplementedError
def DoCanRead(self, stream):
return True
wx.Image.AddHandler(DDSHandler())
class TestFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, pos=(0, 0), size=(320, 240))
self.CentreOnScreen(wx.BOTH)
self.bmp = wx.BitmapFromImage(wx.Image("test.dds"))
self.Bind(wx.EVT_PAINT, self.__OnPaint)
def __OnPaint(self, event):
dc = wx.PaintDC(self)
dc.DrawBitmap(self.bmp, 10, 10, True)
class TestApp(wx.App):
def OnInit(self):
"OnInit"
frame = TestFrame(None, "TestApp")
frame.Show()
self.SetTopWindow(frame)
return True
def OnExit(self):
"OnExit"
pass
TestApp(redirect=False).MainLoop()
참고자료:
http://www.bitpim.org/pyxr/c/projects/bitpim/src/brewcompressedimage.py.html
import wx
import struct
class TestFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, pos=(0, 0), size=(320, 240))
self.CentreOnScreen(wx.BOTH)
img_width = 128
img_height = 64
lineList = []
for i in xrange(img_height):
p = 255 * i / img_height
lineList.append(struct.pack("=BBB", p, p, p) * img_width)
img = wx.ImageFromData(img_width, img_height, "".join(lineList))
self.bmp = wx.BitmapFromImage(img)
self.Bind(wx.EVT_PAINT, self.__OnPaint)
def __OnPaint(self, event):
dc = wx.PaintDC(self)
dc.DrawBitmap(self.bmp, 50, 10, True)
class TestApp(wx.App):
def OnInit(self):
"OnInit"
frame = TestFrame(None, "TestApp")
frame.Show()
self.SetTopWindow(frame)
return True
def OnExit(self):
"OnExit"
pass
TestApp(redirect=False).MainLoop()


python 을 좋아하는 게임 프로그래머