Use mac_image (from cmif stuff)

Fixed off-by-four error
Keep data around so it won't get reclaimed
This commit is contained in:
Jack Jansen 1996-10-04 15:22:37 +00:00
parent 30fe363fd8
commit 6f1ee20501
2 changed files with 64 additions and 46 deletions

View File

@ -13,6 +13,7 @@
import imgformat
import macfs
import struct
import mac_image
# Where is the picture window?
@ -23,44 +24,6 @@
MAXWIDTH=320
MAXHEIGHT=320
def dumppixmap(data):
baseAddr, \
rowBytes, \
t, l, b, r, \
pmVersion, \
packType, packSize, \
hRes, vRes, \
pixelType, pixelSize, \
cmpCount, cmpSize, \
planeBytes, pmTable, pmReserved \
= struct.unpack("lhhhhhhhlllhhhhlll", data)
print 'Base: 0x%x'%baseAddr
print 'rowBytes: %d (0x%x)'%(rowBytes&0x3fff, rowBytes)
print 'rect: %d, %d, %d, %d'%(t, l, b, r)
print 'pmVersion: 0x%x'%pmVersion
print 'packing: %d %d'%(packType, packSize)
print 'resolution: %f x %f'%(float(hRes)/0x10000, float(vRes)/0x10000)
print 'pixeltype: %d, size %d'%(pixelType, pixelSize)
print 'components: %d, size %d'%(cmpCount, cmpSize)
print 'planeBytes: %d (0x%x)'%(planeBytes, planeBytes)
print 'pmTable: 0x%x'%pmTable
print 'pmReserved: 0x%x'%pmReserved
def mk16pixmap(w, h, data):
"""kludge a pixmap together"""
rv = struct.pack("lhhhhhhhlllhhhhlll",
id(data)+12,
w*2 + 0x8000,
0, 0, h, w,
0,
0, 0, # XXXX?
72<<16, 72<<16,
16, 16, # XXXX
3, 5,
0, 0, 0)
print 'Our pixmap, size %d:'%len(rv)
dumppixmap(rv)
return Qd.RawBitMap(rv)
def main():
print 'hello world'
@ -98,12 +61,12 @@ def opendoc(self, *args):
bar.set(10)
data = rdr.read()
del bar
pixmap = mk16pixmap(w, h, data)
self.showimg(w, h, pixmap)
pixmap = mac_image.mkpixmap(w, h, imgformat.macrgb16, data)
self.showimg(w, h, pixmap, data)
def showimg(self, w, h, pixmap):
def showimg(self, w, h, pixmap, data):
win = imgwindow(self)
win.open(w, h, pixmap)
win.open(w, h, pixmap, data)
self.lastwin = win
def info(self, *args):
@ -111,8 +74,9 @@ def info(self, *args):
self.lastwin.info()
class imgwindow(FrameWork.Window):
def open(self, width, height, pixmap):
def open(self, width, height, pixmap, data):
self.pixmap = pixmap
self.data = data
self.pictrect = (0, 0, width, height)
bounds = (LEFT, TOP, LEFT+width, TOP+height)
@ -128,8 +92,7 @@ def do_update(self, *args):
currect, QuickDraw.srcCopy, None)
self.info()
Qd.CopyBits(self.pixmap, self.wid.GetWindowPort().portBits, self.pictrect,
currect, QuickDraw.srcCopy+QuickDraw.ditherCopy, None)
## Qd.DrawPicture(self.picture, currect)
currect, QuickDraw.srcCopy, None)
def fitrect(self):
"""Return self.pictrect scaled to fit in window"""
@ -151,6 +114,6 @@ def fitrect(self):
def info(self):
graf = self.wid.GetWindowPort()
bits = graf.portBits
dumppixmap(bits.pixmap_data)
mac_image.dumppixmap(bits.pixmap_data)
main()

View File

@ -0,0 +1,55 @@
"""mac_image - Helper routines (hacks) for images"""
import imgformat
import Qd
import time
import struct
_fmt_to_mac = {
imgformat.macrgb16 : (16, 16, 3, 5),
}
def mkpixmap(w, h, fmt, data):
"""kludge a pixmap together"""
fmtinfo = _fmt_to_mac[fmt]
rv = struct.pack("lhhhhhhhlllhhhhlll",
id(data)+16,
w*2 + 0x8000,
0, 0, h, w,
0,
0, 0, # XXXX?
72<<16, 72<<16,
fmtinfo[0], fmtinfo[1],
fmtinfo[2], fmtinfo[3],
0, 0, 0)
## print 'Our pixmap, size %d:'%len(rv)
## dumppixmap(rv)
return Qd.RawBitMap(rv)
def dumppixmap(data):
baseAddr, \
rowBytes, \
t, l, b, r, \
pmVersion, \
packType, packSize, \
hRes, vRes, \
pixelType, pixelSize, \
cmpCount, cmpSize, \
planeBytes, pmTable, pmReserved \
= struct.unpack("lhhhhhhhlllhhhhlll", data)
print 'Base: 0x%x'%baseAddr
print 'rowBytes: %d (0x%x)'%(rowBytes&0x3fff, rowBytes)
print 'rect: %d, %d, %d, %d'%(t, l, b, r)
print 'pmVersion: 0x%x'%pmVersion
print 'packing: %d %d'%(packType, packSize)
print 'resolution: %f x %f'%(float(hRes)/0x10000, float(vRes)/0x10000)
print 'pixeltype: %d, size %d'%(pixelType, pixelSize)
print 'components: %d, size %d'%(cmpCount, cmpSize)
print 'planeBytes: %d (0x%x)'%(planeBytes, planeBytes)
print 'pmTable: 0x%x'%pmTable
print 'pmReserved: 0x%x'%pmReserved
for i in range(0, len(data), 16):
for j in range(16):
if i + j < len(data):
print '%02.2x'%ord(data[i+j]),
print