class ImageScene2D_LazyTest(ut.TestCase): def setUp(self): self.layerstack = LayerStackModel() self.sims = StackedImageSources(self.layerstack) self.g = Graph() self.op = OpLazy(self.g) self.ds = LazyflowSource(self.op.Output) self.ss = PlanarSliceSource(self.ds, projectionAlongTZC) self.layer = GrayscaleLayer(self.ds, normalize=False) self.layerstack.append(self.layer) self.ims = self.layer.createImageSource([self.ss]) self.sims.register(self.layer, self.ims) self.scene = ImageScene2D(PositionModel(), (0, 0, 0), preemptive_fetch_number=0) self.scene.setCacheSize(1) self.scene.stackedImageSources = self.sims self.scene.dataShape = (30, 30) def renderScene(self, s, exportFilename=None, joinRendering=True): img = QImage(30, 30, QImage.Format_ARGB32_Premultiplied) img.fill(Qt.white) p = QPainter(img) s.render(p) # trigger a rendering of the whole scene if joinRendering: # wait for all the data to arrive s.joinRenderingAllTiles( viewport_only=False) # There is no viewport! # finally, render everything s.render(p) p.end() if exportFilename is not None: img.save(exportFilename) return byte_view(img) def testLazy(self): for i in range(3): self.op.setConstant(i) aimg = self.renderScene(self.scene, "/tmp/a_%03d.png" % i) assert numpy.all( aimg[:, :, 0] == i), "!= %d, [0,0,0]=%d" % (i, aimg[0, 0, 0]) self.op.setConstant(42) self.op.setDelay(1) aimg = self.renderScene(self.scene, joinRendering=False, exportFilename="/tmp/x_%03d.png" % i) # this should be "i", not 255 (the default background for the imagescene) assert numpy.all( aimg[:, :, 0] == i), "!= %d, [0,0,0]=%d" % (i, aimg[0, 0, 0]) # Now give the scene time to update before we change it again... self.scene.joinRenderingAllTiles(viewport_only=False)
class ImageScene2D_RenderTest(ut.TestCase): @classmethod def setUpClass(cls): cls.app = None if QApplication.instance(): cls.app = QApplication.instance() else: cls.app = QApplication([]) @classmethod def tearDownClass(cls): del cls.app def setUp(self): self.layerstack = LayerStackModel() self.sims = StackedImageSources(self.layerstack) self.GRAY = 201 self.ds = ConstantSource(self.GRAY) self.layer = GrayscaleLayer(self.ds) self.layer.set_normalize(0, False) self.layerstack.append(self.layer) self.ims = self.layer.createImageSource([self.ds]) self.sims.register(self.layer, self.ims) self.scene = ImageScene2D(PositionModel(), (0, 3, 4), preemptive_fetch_number=0) self.scene.stackedImageSources = self.sims self.scene.dataShape = (310, 290) def renderScene(self, s, exportFilename=None): img = QImage(310, 290, QImage.Format_ARGB32_Premultiplied) img.fill(0) p = QPainter(img) s.render(p) s.joinRenderingAllTiles(viewport_only=False) s.render(p) p.end() if exportFilename is not None: img.save(exportFilename) return byte_view(img) def testBasicImageRenderingCapability(self): aimg = self.renderScene(self.scene) self.assertTrue(np.all(aimg[:, :, 0:3] == self.GRAY)) self.assertTrue(np.all(aimg[:, :, 3] == 255)) def testToggleVisibilityOfOneLayer(self): aimg = self.renderScene(self.scene) self.assertTrue(np.all(aimg[:, :, 0:3] == self.GRAY)) self.assertTrue(np.all(aimg[:, :, 3] == 255)) self.layer.visible = False aimg = self.renderScene(self.scene) self.assertTrue(np.all(aimg[:, :, 0:3] == 0)) # all white self.assertTrue(np.all(aimg[:, :, 3] == 0)) self.layer.visible = True aimg = self.renderScene(self.scene) self.assertTrue(np.all(aimg[:, :, 0:3] == self.GRAY)) self.assertTrue(np.all(aimg[:, :, 3] == 255))