def imread_qt(filename): """ Read an image using QT's QImage.load """ qtimg = QImage() if not qtimg.load(filename): # QImage.load() returns false on failure, so raise an exception raise IOError('Unable to load file %s' % filename) if qtimg.depth() == 1: raise IOError('1-bit images currently not supported') # TODO: Warn about other odd formats we don't currently handle properly, # such as the odd 16-bit packed formats QT supports arrayptr = qtimg.bits() # QT may pad the image, so we need to use bytesPerLine, not width for # the conversion to a numpy array bytesPerPixel = qtimg.depth() // 8 pixelsPerLine = qtimg.bytesPerLine() // bytesPerPixel img_size = pixelsPerLine * qtimg.height() * bytesPerPixel arrayptr.setsize(img_size) img = np.array(arrayptr) # Reshape and trim down to correct dimensions if bytesPerPixel > 1: img = img.reshape((qtimg.height(), pixelsPerLine, bytesPerPixel)) img = img[:, :qtimg.width(), :] else: img = img.reshape((qtimg.height(), pixelsPerLine)) img = img[:, :qtimg.width()] # Strip qt's false alpha channel if needed # and reorder color axes as required if bytesPerPixel == 4 and not qtimg.hasAlphaChannel(): img = img[:, :, 2::-1] elif bytesPerPixel == 4: img[:, :, 0:3] = img[:, :, 2::-1] return img
def imread_qt(filename): """ Read an image using QT's QImage.load """ qtimg = QImage() if not qtimg.load(filename): # QImage.load() returns false on failure, so raise an exception raise IOError('Unable to load file %s' % filename) if qtimg.depth() == 1: raise IOError('1-bit images currently not supported') # TODO: Warn about other odd formats we don't currently handle properly, # such as the odd 16-bit packed formats QT supports arrayptr = qtimg.bits() # QT may pad the image, so we need to use bytesPerLine, not width for # the conversion to a numpy array bytes_per_pixel = qtimg.depth() // 8 pixels_per_line = qtimg.bytesPerLine() // bytes_per_pixel img_size = pixels_per_line * qtimg.height() * bytes_per_pixel arrayptr.setsize(img_size) img = np.array(arrayptr) # Reshape and trim down to correct dimensions if bytes_per_pixel > 1: img = img.reshape((qtimg.height(), pixels_per_line, bytes_per_pixel)) img = img[:, :qtimg.width(), :] else: img = img.reshape((qtimg.height(), pixels_per_line)) img = img[:, :qtimg.width()] # Strip qt's false alpha channel if needed # and reorder color axes as required if bytes_per_pixel == 4 and not qtimg.hasAlphaChannel(): img = img[:, :, 2::-1] elif bytes_per_pixel == 4: img[:, :, 0:3] = img[:, :, 2::-1] return img
def readImage(self, filename, sbimage): image = QImage() if (image.load(filename.getString())): # Keep in 8-bits mode if that was what we read if (image.depth() == 8 and image.isGrayscale()): c = 1 else: # FIXME: consider if we should detect allGrayscale() and alpha (c = 2) c = 3 if image.hasAlphaChannel(): c = 4 image.convertToFormat(QImage.Format_ARGB32) else: image.convertToFormat(QImage.Format_RGB32) # FIXME 20080508 jkg: implement when pivy is ready #sbimage.setValue(SbVec2s(image.width(), image.height()), c, None) return True return False