Example #1
0
 def _build(self):
     self.mainLayout = qt.QVBoxLayout(self)
     self.parametersWidget = ParametersWidget(self)
     self.outputFileWidget = OutputFile(self)
     self.imageBrowser = ExternalImagesWindow.ExternalImagesWindow(
         self, crop=False, selection=False, imageicons=False)
     self.mainLayout.addWidget(self.parametersWidget)
     self.mainLayout.addWidget(self.outputFileWidget)
     self.mainLayout.addWidget(self.imageBrowser)
     self.parametersWidget.parametersWidgetSignal.connect(self.mySlot)
    def _loadImageFiles(self):
        if self.getStackDataObject() is None:
            return
        getfilter = True
        fileTypeList = [
            "PNG Files (*png)", "JPEG Files (*jpg *jpeg)", "IMAGE Files (*)",
            "EDF Files (*edf)", "EDF Files (*ccd)", "EDF Files (*)"
        ]
        message = "Open image file"
        filenamelist, filefilter = PyMcaFileDialogs.getFileList(
            parent=None,
            filetypelist=fileTypeList,
            message=message,
            getfilter=getfilter,
            single=False,
            currentfilter=None)
        if len(filenamelist) < 1:
            return
        imagelist = []
        imagenames = []
        mask = self.getStackSelectionMask()
        if mask is None:
            r, n = self.getStackROIImagesAndNames()
            shape = r[0].shape
        else:
            shape = mask.shape
        if filefilter.split()[0] in ["EDF"]:
            for filename in filenamelist:
                #read the edf file
                edf = EDFStack.EdfFileDataSource.EdfFileDataSource(filename)

                #the list of images
                keylist = edf.getSourceInfo()['KeyList']
                if len(keylist) < 1:
                    msg = qt.QMessageBox(None)
                    msg.setIcon(qt.QMessageBox.Critical)
                    msg.setText("Cannot read image from file")
                    msg.exec_()
                    return

                for key in keylist:
                    #get the data
                    dataObject = edf.getDataObject(key)
                    data = dataObject.data
                    if data.shape[0] not in shape:
                        continue
                    if data.shape[1] not in shape:
                        continue
                    imagename = dataObject.info.get('Title', "")
                    if imagename != "":
                        imagename += " "
                    imagename += os.path.basename(filename) + " " + key
                    imagelist.append(data)
                    imagenames.append(imagename)
            if len(imagelist) == 0:
                msg = qt.QMessageBox(None)
                msg.setIcon(qt.QMessageBox.Critical)
                msg.setText("Cannot read a valid image from the file")
                msg.exec_()
                return
            crop = False
            self.widget = StackPluginResultsWindow.StackPluginResultsWindow(
                parent=None, usetab=False)
            self.widget.buildAndConnectImageButtonBox()
            self.widget.sigMaskImageWidgetSignal.connect(self.mySlot)
            self.widget.setStackPluginResults(imagelist,
                                              image_names=imagenames)
            self._showWidget()
            return
        else:
            #Try pure Image formats
            for filename in filenamelist:
                image = qt.QImage(filename)
                if image.isNull():
                    msg = qt.QMessageBox(self)
                    msg.setIcon(qt.QMessageBox.Critical)
                    msg.setText("Cannot read file %s as an image" % filename)
                    msg.exec_()
                    return
                imagelist.append(image)
                imagenames.append(os.path.basename(filename))

            if len(imagelist) == 0:
                msg = qt.QMessageBox(None)
                msg.setIcon(qt.QMessageBox.Critical)
                msg.setText("Cannot read a valid image from the file")
                msg.exec_()
                return
            self.widget = ExternalImagesWindow.ExternalImagesWindow(
                parent=None,
                rgbwidget=None,
                selection=True,
                colormap=True,
                imageicons=True,
                standalonesave=True)
            self.widget.buildAndConnectImageButtonBox()
            self.widget.sigMaskImageWidgetSignal.connect(self.mySlot)
            self.widget.setImageData(None)
            self.widget.setQImageList(imagelist,
                                      shape[1],
                                      shape[0],
                                      clearmask=False,
                                      data=None,
                                      imagenames=imagenames)
            #data=self.__stackImageData)
            self._showWidget()
            return
    def _loadImageFiles(self):
        if self.getStackDataObject() is None:
            return
        getfilter = True
        fileTypeList = [
            "PNG Files (*png)", "JPEG Files (*jpg *jpeg)", "IMAGE Files (*)",
            "DAT Files (*dat)", "CSV Files (*csv)", "EDF Files (*edf)",
            "EDF Files (*ccd)", "EDF Files (*)"
        ]
        message = "Open image file"
        filenamelist, filefilter = PyMcaFileDialogs.getFileList(
            parent=None,
            filetypelist=fileTypeList,
            message=message,
            getfilter=getfilter,
            single=False,
            currentfilter=None)
        if len(filenamelist) < 1:
            return
        imagelist = []
        imagenames = []
        mask = self.getStackSelectionMask()
        if mask is None:
            r, n = self.getStackROIImagesAndNames()
            shape = r[0].shape
        else:
            shape = mask.shape
        extension = qt.safe_str(os.path.splitext(filenamelist[0])[1])
        if (filefilter.split()[0] in ["EDF"]) or \
           (extension.upper() in [".EDF", ".TIF"]):
            for filename in filenamelist:
                #read the edf file
                edf = EDFStack.EdfFileDataSource.EdfFileDataSource(filename)

                #the list of images
                keylist = edf.getSourceInfo()['KeyList']
                if len(keylist) < 1:
                    msg = qt.QMessageBox(None)
                    msg.setIcon(qt.QMessageBox.Critical)
                    msg.setText("Cannot read image from file")
                    msg.exec_()
                    return

                for key in keylist:
                    #get the data
                    dataObject = edf.getDataObject(key)
                    data = dataObject.data
                    if data.shape[0] not in shape:
                        continue
                    if data.shape[1] not in shape:
                        continue
                    imagename = dataObject.info.get('Title', "")
                    if imagename != "":
                        imagename += " "
                    imagename += os.path.basename(filename) + " " + key
                    imagelist.append(data)
                    imagenames.append(imagename)
            if len(imagelist) == 0:
                msg = qt.QMessageBox(None)
                msg.setIcon(qt.QMessageBox.Critical)
                msg.setText("Cannot read a valid image from the file")
                msg.exec_()
                return
            crop = False
            self.widget = StackPluginResultsWindow.StackPluginResultsWindow(
                parent=None, usetab=False)
            self.widget.buildAndConnectImageButtonBox()
            self.widget.sigMaskImageWidgetSignal.connect(self.mySlot)
            self.widget.setStackPluginResults(imagelist,
                                              image_names=imagenames)
            self._showWidget()
            return
        elif extension.lower() in [".csv", ".dat"]:
            # what to do if more than one file selected ?
            from PyMca5.PyMca import specfilewrapper as Specfile
            sf = Specfile.Specfile(filenamelist[0])
            scan = sf[0]
            labels = scan.alllabels()
            data = scan.data()
            scan = None
            sf = None
            if "column" in labels:
                offset = labels.index("column")
                ncols = int(data[offset].max() + 1)
                offset += 1
            else:
                raise IOError("Only images exported as csv supported")
            imagelist = []
            imagenames = []
            for i in range(offset, len(labels)):
                if labels[i].startswith("s("):
                    continue
                tmpData = data[i]
                tmpData.shape = -1, ncols
                imagelist.append(tmpData)
                imagenames.append(labels[i])
            crop = False
            self.widget = StackPluginResultsWindow.StackPluginResultsWindow(
                parent=None, usetab=False)
            self.widget.buildAndConnectImageButtonBox()
            self.widget.sigMaskImageWidgetSignal.connect(self.mySlot)
            self.widget.setStackPluginResults(imagelist,
                                              image_names=imagenames)
            self._showWidget()
            return
        else:
            #Try pure Image formats
            for filename in filenamelist:
                image = qt.QImage(filename)
                if image.isNull():
                    msg = qt.QMessageBox(None)
                    msg.setIcon(qt.QMessageBox.Critical)
                    msg.setText("Cannot read file %s as an image" % filename)
                    msg.exec_()
                    return
                imagelist.append(image)
                imagenames.append(os.path.basename(filename))

            if len(imagelist) == 0:
                msg = qt.QMessageBox(None)
                msg.setIcon(qt.QMessageBox.Critical)
                msg.setText("Cannot read a valid image from the file")
                msg.exec_()
                return
            self.widget = ExternalImagesWindow.ExternalImagesWindow(
                parent=None,
                rgbwidget=None,
                selection=True,
                colormap=True,
                imageicons=True,
                standalonesave=True)
            self.widget.buildAndConnectImageButtonBox()
            self.widget.sigMaskImageWidgetSignal.connect(self.mySlot)
            self.widget.setImageData(None)
            self.widget.setQImageList(imagelist,
                                      shape[1],
                                      shape[0],
                                      clearmask=False,
                                      data=None,
                                      imagenames=imagenames)
            #data=self.__stackImageData)
            self._showWidget()
            return