# -*- coding: utf-8 import numpy as np import unittest from grass.gunittest.case import TestCase from grass.gunittest.main import test from grass.pygrass.raster import raster2numpy_img from grass.pygrass.gis.region import Region from grass.script.core import tempfile has_PyQt4 = False try: from PyQt4.QtCore import * from PyQt4.QtGui import * has_PyQt4 = True except: pass class RasterRowImgTestCase(TestCase): name = "RasterRowImgTestCase_map" @classmethod def setUpClass(cls): """Create test raster map and region""" cls.use_temp_region() cls.runModule("g.region", n=60, s=0, e=40, w=0, res=0.1) cls.runModule("r.mapcalc", expression="%s = if(row() >= 10 && row() <= 60, null(), row() + (10.0 * col()))" % (cls.name), overwrite=True) cls.runModule("r.colors", map=cls.name, color="elevation") @classmethod def tearDownClass(cls): """Remove the generated vector map, if exist""" cls.runModule("g.remove", flags='f', type='raster', name=cls.name) cls.del_temp_region() @unittest.skipIf(has_PyQt4 is False, "Require PyQt4") def test_resampling_to_QImg_1(self): region = Region() region.from_rast(self.name) region.cols = 320 region.rows = 240 region.adjust() tmpfile = tempfile(False) tmpfile = tmpfile + ".png" a = raster2numpy_img(self.name, region) image = QImage(a.data, region.cols, region.rows, QImage.Format_ARGB32) # image.save("data/a.png") image.save(tmpfile) self.assertFilesEqualMd5(tmpfile, "data/a.png") @unittest.skipIf(has_PyQt4 is False, "Require PyQt4") def test_resampling_to_QImg_2(self): region = Region() region.from_rast(self.name) region.cols = 640 region.rows = 480 region.adjust() tmpfile = tempfile(False) tmpfile = tmpfile + ".png" # With array as argument array = np.ndarray((region.rows * region.cols * 4), np.uint8) raster2numpy_img(rastname=self.name, region=region, color="ARGB", array=array) image = QImage(array.data, region.cols, region.rows, QImage.Format_ARGB32) # image.save("data/b.png") image.save(tmpfile) self.assertFilesEqualMd5(tmpfile, "data/b.png") @unittest.skipIf(has_PyQt4 is False, "Require PyQt4") def test_resampling_to_QImg_large(self): region = Region() region.from_rast(self.name) region.cols = 4000 region.rows = 3000 region.adjust() tmpfile = tempfile(False) tmpfile = tmpfile + ".png" # With array as argument array = np.ndarray((region.rows * region.cols * 4), np.uint8) raster2numpy_img(rastname=self.name, region=region, color="ARGB", array=array) image = QImage(array.data, region.cols, region.rows, QImage.Format_ARGB32) # image.save("data/c.png") image.save(tmpfile) self.assertFilesEqualMd5(tmpfile, "data/c.png") @unittest.skipIf(has_PyQt4 is False, "Require PyQt4") def test_resampling_to_QImg_3(self): region = Region() region.from_rast(self.name) region.cols = 400 region.rows = 300 region.adjust() tmpfile = tempfile(False) tmpfile = tmpfile + ".png" # With array as argument array = np.ndarray((region.rows * region.cols * 4), np.uint8) raster2numpy_img(rastname=self.name, region=region, color="RGB", array=array) image = QImage(array.data, region.cols, region.rows, QImage.Format_RGB32) # image.save("data/d.png") image.save(tmpfile) self.assertFilesEqualMd5(tmpfile, "data/d.png") @unittest.skipIf(has_PyQt4 is False, "Require PyQt4") def test_resampling_to_QImg_4(self): region = Region() region.from_rast(self.name) region.cols = 400 region.rows = 300 region.adjust() tmpfile = tempfile(False) tmpfile = tmpfile + ".png" array = raster2numpy_img(rastname=self.name, region=region, color="RGB") image = QImage(array.data, region.cols, region.rows, QImage.Format_RGB32) # image.save("data/e.png") image.save(tmpfile) self.assertFilesEqualMd5(tmpfile, "data/e.png") def test_resampling_to_numpy_img_1(self): region = Region() region.ewres = 10 region.nsres = 10 region.adjust(rows=True, cols=True) a = raster2numpy_img(self.name, region) self.assertEqual(len(a), region.rows * region.cols * 4) def test_resampling_to_numpy_img_2(self): region = Region() region.ewres = 1 region.nsres = 1 region.adjust(rows=True, cols=True) a = raster2numpy_img(self.name, region) self.assertEqual(len(a), region.rows * region.cols * 4) def test_resampling_to_numpy_img_3(self): region = Region() region.ewres = 0.4 region.nsres = 0.4 region.adjust(rows=True, cols=True) a = raster2numpy_img(self.name, region, color="GRAY1") self.assertEqual(len(a), region.rows * region.cols * 1) def test_resampling_to_numpy_img_4(self): region = Region() region.ewres = 0.1 region.nsres = 0.1 region.adjust(rows=True, cols=True) a = raster2numpy_img(self.name, region, color="GRAY2") self.assertEqual(len(a), region.rows * region.cols * 1) if __name__ == '__main__': test()