def main(): imp = IJ.getFilePath("Select DCIMG file") if not imp: return root, ext = os.path.splitext(imp) if ext.lower() != '.dcimg': cFrame = PlugInFrame('ERR DLG') MessageDialog(cFrame, 'ERROR', 'Expected extension .dcimg') return #Lets start fID = open(imp, 'rb') hdr_bytes = read_header_bytes(fID) hdr = parse_header_bytes(fID, hdr_bytes) metadataStr = beginMetadata() for key, value in hdr.iteritems(): metadataStr += addMetadataEntry(key, str(value)) metadataStr += endMetadata() metadataDlg = HTMLDialog("DCIMG metadata", metadataStr, 0) size = metadataDlg.getSize() if size.width < 300: size.width = 300 if size.height < 500: size.height = 500 metadataDlg.setSize(size) finfo = FileInfo() finfo.fileName = imp #finfo.width = hdr['xsize_req'] finfo.width = hdr['xsize'] finfo.height = hdr['ysize'] finfo.nImages = hdr['nframes'] finfo.offset = 232 finfo.fileType = hdr['bitdepth'] / 8 - 1 #Ugh finfo.intelByteOrder = 1 #finfo.gapBetweenImages = int(hdr['bytes_per_img']*(1-float(hdr['xsize_req'])/float(hdr['xsize']))) finfo.gapBetweenImages = 0 finfo.fileFormat = 1 finfo.samplesPerPixel = 1 finfo.displayRanges = None finfo.lutSize = 0 finfo.whiteIsZero = 0 vs = VirtualStack() finfo.virtualStack = vs FileInfoVirtualStack(finfo)
# Approach 3: using low-level ImageJ libraries from ij.io import FileInfo, FileOpener fi = FileInfo() fi.width = width fi.height = height fi.offset = headerSize + slice_offset # ASSUMES images aren't ARGB, which would also have 32 as bit depth # (There are other types: see FileInfo javadoc) fi.fileType = { 8: FileInfo.GRAY8, 16: FileInfo.GRAY16_UNSIGNED, 24: FileInfo.RGB, 32: FileInfo.GRAY32_UNSIGNED }[bitDepth] fi.samplesPerPixel = 1 fi.nImages = num_slices directory, filename = os.path.split(filepath) fi.directory = directory fi.fileName = filename imp = FileOpener(fi).openImage() # returns an ImagePlus imp.show() # Approach 4: with low-level java libraries from ij import ImagePlus, ImageStack from ij.process import ByteProcessor, ShortProcessor, FloatProcessor from java.io import RandomAccessFile from jarray import zeros from java.nio import ByteBuffer, ByteOrder
metadataStr += addMetadataEntry('fileType', str(fileType)) metadataStr += addMetadataEntry('gapBetweenImages', str(gap+64)) if(metadataInconsistency > 0): metadataStr += addMetadataEntry('Inconsistent METADATA', str(metadataInconsistency)) metadataStr += endMetadata() metadataDlg = HTMLDialog("HIS parameters", metadataStr, 0) size = metadataDlg.getSize() if size.width < 300: size.width = 300 if size.height < 300: size.height = 300 metadataDlg.setSize(size) finfo = FileInfo() finfo.fileName = imp finfo.width = width finfo.height = height finfo.nImages = frames finfo.offset = offset+64 finfo.fileType = fileType-1 finfo.intelByteOrder = 1 finfo.gapBetweenImages = gap+64 finfo.fileFormat = 1 finfo.samplesPerPixel = 1 finfo.displayRanges = None finfo.lutSize = 0 finfo.whiteIsZero = 0 vs = VirtualStack() finfo.virtualStack = vs FileInfoVirtualStack(finfo)