diff options
Diffstat (limited to 'Demo/sgi/video/imgconv.py')
-rwxr-xr-x | Demo/sgi/video/imgconv.py | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/Demo/sgi/video/imgconv.py b/Demo/sgi/video/imgconv.py deleted file mode 100755 index 8fc98b4..0000000 --- a/Demo/sgi/video/imgconv.py +++ /dev/null @@ -1,139 +0,0 @@ -import imageop - -error = 'imgconv.error' - -LOSSY = 1 -NOT_LOSSY = 0 - -def null(img, x, y): - return img - -def mono2grey(img, x, y): - return imageop.mono2grey(img, x, y, 0, 255) - -def grey2jpeggrey(img, x, y): - import jpeg - return jpeg.compress(img, x, y, 1) - -def rgb2jpeg(img, x, y): - import jpeg - return jpeg.compress(img, x, y, 4) - -def jpeggrey2grey(img, width, height): - import jpeg - data, width, height, bytesperpixel = jpeg.decompress(img) - if bytesperpixel <> 1: raise RuntimeError, 'not greyscale jpeg' - return data - -def jpeg2rgb(img, width, height): - import jpeg - data, width, height, bytesperpixel = jpeg.decompress(img) - if bytesperpixel <> 4: raise RuntimeError, 'not rgb jpeg' - return data - -converters = [ \ - ('grey', 'grey4', imageop.grey2grey4, LOSSY), \ - ('grey', 'grey2', imageop.dither2grey2, LOSSY), \ - ('grey', 'mono', imageop.dither2mono, LOSSY), \ - ('mono', 'grey', mono2grey, NOT_LOSSY), \ - ('grey2', 'grey', imageop.grey22grey, NOT_LOSSY), \ - ('grey4', 'grey', imageop.grey42grey, NOT_LOSSY), \ - ('rgb', 'rgb8', imageop.rgb2rgb8, LOSSY), \ - ('rgb8', 'rgb', imageop.rgb82rgb, NOT_LOSSY), \ - ('rgb', 'grey', imageop.rgb2grey, LOSSY), \ - ('grey', 'rgb', imageop.grey2rgb, NOT_LOSSY), \ - ('jpeggrey','grey',jpeggrey2grey, NOT_LOSSY), \ - ('grey', 'jpeggrey',grey2jpeggrey, LOSSY), \ - ('jpeg', 'rgb', jpeg2rgb, NOT_LOSSY), \ - ('rgb', 'jpeg', rgb2jpeg, LOSSY), \ -] - -built = {} - -def addconverter(fcs, tcs, lossy, func): - for i in range(len(converters)): - ifcs, itcs, irtn, ilossy = converters[i] - if (fcs, tcs) == (ifcs, itcs): - converters[i] = (fcs, tcs, func, lossy) - return - converters.append((fcs,tcs,lossy,func)) - -def getconverter(fcs, tcs): - # - # If formats are the same return the dummy converter - # - if fcs == tcs: return null - # - # Otherwise, if we have a converter return that one - # - for ifcs, itcs, irtn, ilossy in converters: - if (fcs, tcs) == (ifcs, itcs): - return irtn - # - # Finally, we try to create a converter - # - if not built.has_key(fcs): - built[fcs] = enumerate_converters(fcs) - if not built[fcs].has_key(tcs): - raise error, 'Sorry, conversion from '+fcs+' to '+tcs+ \ - ' is not implemented' - if len(built[fcs][tcs]) == 3: - # - # Converter not instantiated yet - # - built[fcs][tcs].append(instantiate_converter(built[fcs][tcs])) - cf = built[fcs][tcs][3] - return cf - -def enumerate_converters(fcs): - cvs = {} - formats = [fcs] - steps = 0 - while 1: - workdone = 0 - for ifcs, itcs, irtn, ilossy in converters: - if ifcs == fcs: - template = [ilossy, 1, [irtn]] - elif cvs.has_key(ifcs): - template = cvs[ifcs][:] - template[2] = template[2][:] - if ilossy: - template[0] = ilossy - template[1] = template[1] + 1 - template[2].append(irtn) - else: - continue - if not cvs.has_key(itcs): - cvs[itcs] = template - workdone = 1 - else: - previous = cvs[itcs] - if template < previous: - cvs[itcs] = template - workdone = 1 - if not workdone: - break - steps = steps + 1 - if steps > len(converters): - print '------------------loop in emunerate_converters--------' - print 'CONVERTERS:' - print converters - print 'RESULTS:' - print cvs - raise error, 'Internal error - loop' - return cvs - -def instantiate_converter(args): - list = args[2] - cl = RtConverters(list) - args.append(cl.convert) - return args - -class RtConverters: - def __init__(self, list): - self.list = list - - def convert(self, img, w, h): - for cv in self.list: - img = cv(img, w, h) - return img |