SF.net SVN: matplotlib:[7027] branches/v0_98_5_maint/examples/tests/ pngsuite/pngsuite.py

2009-04-05 Thread astraw
Revision: 7027
  http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7027&view=rev
Author:   astraw
Date: 2009-04-05 22:06:05 + (Sun, 05 Apr 2009)

Log Message:
---
pngsuite test: plot images in grayscale if the input array is 2 dimensional

Modified Paths:
--
branches/v0_98_5_maint/examples/tests/pngsuite/pngsuite.py

Modified: branches/v0_98_5_maint/examples/tests/pngsuite/pngsuite.py
===
--- branches/v0_98_5_maint/examples/tests/pngsuite/pngsuite.py  2009-04-05 
02:23:03 UTC (rev 7026)
+++ branches/v0_98_5_maint/examples/tests/pngsuite/pngsuite.py  2009-04-05 
22:06:05 UTC (rev 7027)
@@ -8,6 +8,7 @@
 """
 
 from matplotlib import pyplot as plt
+import matplotlib.cm as cm
 import glob
 
 files = glob.glob("basn*.png")
@@ -17,7 +18,11 @@
 
 for i, fname in enumerate(files):
 data = plt.imread(fname)
-plt.imshow(data, extent=[i,i+1,0,1])
+cmap = None # use default colormap
+if data.ndim==2:
+# keep grayscale images gray
+cmap = cm.gray
+plt.imshow(data, extent=[i,i+1,0,1], cmap=cmap)
 
 plt.gca().get_frame().set_facecolor("#dd")
 plt.gca().set_xlim(0, len(files))


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

--
___
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins


SF.net SVN: matplotlib:[7028] branches/v0_98_5_maint/src/_png.cpp

2009-04-05 Thread astraw
Revision: 7028
  http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7028&view=rev
Author:   astraw
Date: 2009-04-05 22:07:01 + (Sun, 05 Apr 2009)

Log Message:
---
read 12 bit PNGs (patch from Tobias Wood)

Modified Paths:
--
branches/v0_98_5_maint/src/_png.cpp

Modified: branches/v0_98_5_maint/src/_png.cpp
===
--- branches/v0_98_5_maint/src/_png.cpp 2009-04-05 22:06:05 UTC (rev 7027)
+++ branches/v0_98_5_maint/src/_png.cpp 2009-04-05 22:07:01 UTC (rev 7028)
@@ -208,38 +208,37 @@
 
   png_init_io(png_ptr, fp);
   png_set_sig_bytes(png_ptr, 8);
-
   png_read_info(png_ptr, info_ptr);
 
   png_uint_32 width = info_ptr->width;
   png_uint_32 height = info_ptr->height;
-  bool do_gray_conversion = (info_ptr->bit_depth < 8 &&
- info_ptr->color_type == PNG_COLOR_TYPE_GRAY);
 
   int bit_depth = info_ptr->bit_depth;
-  if (bit_depth == 16) {
-png_set_strip_16(png_ptr);
-  } else if (bit_depth < 8) {
+  
+  // Unpack 1, 2, and 4-bit images
+  if (bit_depth < 8)
 png_set_packing(png_ptr);
-  }
 
-  // convert misc color types to rgb for simplicity
-  if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY ||
-  info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
-png_set_gray_to_rgb(png_ptr);
-  } else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) {
+  // If sig bits are set, shift data
+  png_color_8p sig_bit;
+  if ((info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) && 
png_get_sBIT(png_ptr, info_ptr, &sig_bit))
+png_set_shift(png_ptr, sig_bit);
+
+  // Convert big endian to little
+  if (bit_depth == 16)
+png_set_swap(png_ptr);
+
+  // Convert palletes to full RGB
+  if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
 png_set_palette_to_rgb(png_ptr);
-  }
+  
+  // If there's an alpha channel convert gray to RGB
+  if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
+png_set_gray_to_rgb(png_ptr);
 
   png_set_interlace_handling(png_ptr);
   png_read_update_info(png_ptr, info_ptr);
 
-  bool rgba = info_ptr->color_type == PNG_COLOR_TYPE_RGBA;
-  if ( (info_ptr->color_type != PNG_COLOR_TYPE_RGB) && !rgba) {
-std::cerr << "Found color type " << (int)info_ptr->color_type  << 
std::endl;
-throw Py::RuntimeError("_image_module::readpng: cannot handle color_type");
-  }
-
   /* read file */
   if (setjmp(png_jmpbuf(png_ptr)))
 throw Py::RuntimeError("_image_module::readpng: error during read_image");
@@ -255,37 +254,36 @@
   npy_intp dimensions[3];
   dimensions[0] = height;  //numrows
   dimensions[1] = width;   //numcols
-  dimensions[2] = 4;
+  if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA)
+dimensions[2] = 4; //RGBA images
+  else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)
+dimensions[2] = 3; //RGB images
+  else
+dimensions[2] = 1; //Greyscale images
+  //For gray, return an x by y array, not an x by y by 1
+  int num_dims  = (info_ptr->color_type & PNG_COLOR_MASK_COLOR) ? 3 : 2;
+  
+  double max_value = (1 << ((bit_depth < 8) ? 8 : bit_depth)) - 1;
+  PyArrayObject *A = (PyArrayObject *) PyArray_SimpleNew(num_dims, dimensions, 
PyArray_FLOAT);
 
-  PyArrayObject *A = (PyArrayObject *) PyArray_SimpleNew(3, dimensions, 
PyArray_FLOAT);
-
-  if (do_gray_conversion) {
-float max_value = (float)((1L << bit_depth) - 1);
-for (png_uint_32 y = 0; y < height; y++) {
-  png_byte* row = row_pointers[y];
-  for (png_uint_32 x = 0; x < width; x++) {
-float value = row[x] / max_value;
-size_t offset = y*A->strides[0] + x*A->strides[1];
-*(float*)(A->data + offset + 0*A->strides[2]) = value;
-*(float*)(A->data + offset + 1*A->strides[2]) = value;
-*(float*)(A->data + offset + 2*A->strides[2]) = value;
-*(float*)(A->data + offset + 3*A->strides[2]) = 1.0f;
-  }
+  for (png_uint_32 y = 0; y < height; y++) {
+png_byte* row = row_pointers[y];
+   for (png_uint_32 x = 0; x < width; x++) {
+ size_t offset = y*A->strides[0] + x*A->strides[1];
+ if (bit_depth == 16) {
+   png_uint_16* ptr = &reinterpret_cast (row)[x * 
dimensions[2]];
+   for (png_uint_32 p = 0; p < dimensions[2]; p++)
+ *(float*)(A->data + offset + p*A->strides[2]) = (float)(ptr[p]) / 
max_value;
+ } else {
+   png_byte* ptr = &(row[x * dimensions[2]]);
+   for (png_uint_32 p = 0; p < dimensions[2]; p++)
+   {
+ *(float*)(A->data + offset + p*A->strides[2]) = (float)(ptr[p]) / 
max_value;
+   }
+ }
 }
-  } else {
-for (png_uint_32 y = 0; y < height; y++) {
-  png_byte* row = row_pointers[y];
-  for (png_uint_32 x = 0; x < width; x++) {
-png_byte* ptr = (rgba) ? &(row[x*4]) : &(row[x*3]);
-size_t offset = y*A->strides[0] + x*A->strides[1];
-*(float*)(A->data + offset + 0*A->strides[2]) = (float)(ptr[0]/255.0);
-*(float*)(A->data 

SF.net SVN: matplotlib:[7029] branches/v0_98_5_maint/src/_png.cpp

2009-04-05 Thread astraw
Revision: 7029
  http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7029&view=rev
Author:   astraw
Date: 2009-04-05 22:07:34 + (Sun, 05 Apr 2009)

Log Message:
---
trivial: remove trailing whitespace from source code

Modified Paths:
--
branches/v0_98_5_maint/src/_png.cpp

Modified: branches/v0_98_5_maint/src/_png.cpp
===
--- branches/v0_98_5_maint/src/_png.cpp 2009-04-05 22:07:01 UTC (rev 7028)
+++ branches/v0_98_5_maint/src/_png.cpp 2009-04-05 22:07:34 UTC (rev 7029)
@@ -214,7 +214,7 @@
   png_uint_32 height = info_ptr->height;
 
   int bit_depth = info_ptr->bit_depth;
-  
+
   // Unpack 1, 2, and 4-bit images
   if (bit_depth < 8)
 png_set_packing(png_ptr);
@@ -231,7 +231,7 @@
   // Convert palletes to full RGB
   if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
 png_set_palette_to_rgb(png_ptr);
-  
+
   // If there's an alpha channel convert gray to RGB
   if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
 png_set_gray_to_rgb(png_ptr);
@@ -262,7 +262,7 @@
 dimensions[2] = 1; //Greyscale images
   //For gray, return an x by y array, not an x by y by 1
   int num_dims  = (info_ptr->color_type & PNG_COLOR_MASK_COLOR) ? 3 : 2;
-  
+
   double max_value = (1 << ((bit_depth < 8) ? 8 : bit_depth)) - 1;
   PyArrayObject *A = (PyArrayObject *) PyArray_SimpleNew(num_dims, dimensions, 
PyArray_FLOAT);
 
@@ -283,7 +283,7 @@
  }
 }
   }
-  
+
   //free the png memory
   png_read_end(png_ptr, info_ptr);
   png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL);


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

--
___
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins


SF.net SVN: matplotlib:[7030] branches/v0_98_5_maint/lib/matplotlib/image. py

2009-04-05 Thread astraw
Revision: 7030
  http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7030&view=rev
Author:   astraw
Date: 2009-04-05 22:08:24 + (Sun, 05 Apr 2009)

Log Message:
---
trivial: remove outdated comment

Modified Paths:
--
branches/v0_98_5_maint/lib/matplotlib/image.py

Modified: branches/v0_98_5_maint/lib/matplotlib/image.py
===
--- branches/v0_98_5_maint/lib/matplotlib/image.py  2009-04-05 22:07:34 UTC 
(rev 7029)
+++ branches/v0_98_5_maint/lib/matplotlib/image.py  2009-04-05 22:08:24 UTC 
(rev 7030)
@@ -720,8 +720,6 @@
 `_ is installed, it will
 use it to load the image and return an array (if possible) which
 can be used with :func:`~matplotlib.pyplot.imshow`.
-
-TODO: support RGB and grayscale return values in _image.readpng
 """
 
 def pilread():


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

--
___
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins


SF.net SVN: matplotlib:[7031] branches/v0_98_5_maint/CHANGELOG

2009-04-05 Thread astraw
Revision: 7031
  http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7031&view=rev
Author:   astraw
Date: 2009-04-05 22:09:45 + (Sun, 05 Apr 2009)

Log Message:
---
update changelog about Tobias' patch

Modified Paths:
--
branches/v0_98_5_maint/CHANGELOG

Modified: branches/v0_98_5_maint/CHANGELOG
===
--- branches/v0_98_5_maint/CHANGELOG2009-04-05 22:08:24 UTC (rev 7030)
+++ branches/v0_98_5_maint/CHANGELOG2009-04-05 22:09:45 UTC (rev 7031)
@@ -1,3 +1,6 @@
+2009-04-05 _png.read_png() reads 12 bit PNGs (patch from 
+   Tobias Wood) - ADS
+
 2009-03-17 Fix bugs in edge color handling by contourf, found
by Jae-Joon Lee. - EF
 


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

--
___
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins


SF.net SVN: matplotlib:[7032] trunk/matplotlib

2009-04-05 Thread astraw
Revision: 7032
  http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7032&view=rev
Author:   astraw
Date: 2009-04-06 01:52:45 + (Mon, 06 Apr 2009)

Log Message:
---
Merged revisions 7027-7031 via svnmerge from 
https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/branches/v0_98_5_maint


  r7027 | astraw | 2009-04-05 15:06:05 -0700 (Sun, 05 Apr 2009) | 1 line
  
  pngsuite test: plot images in grayscale if the input array is 2 dimensional

  r7028 | astraw | 2009-04-05 15:07:01 -0700 (Sun, 05 Apr 2009) | 1 line
  
  read 12 bit PNGs (patch from Tobias Wood)

  r7029 | astraw | 2009-04-05 15:07:34 -0700 (Sun, 05 Apr 2009) | 1 line
  
  trivial: remove trailing whitespace from source code

  r7030 | astraw | 2009-04-05 15:08:24 -0700 (Sun, 05 Apr 2009) | 1 line
  
  trivial: remove outdated comment

  r7031 | astraw | 2009-04-05 15:09:45 -0700 (Sun, 05 Apr 2009) | 1 line
  
  update changelog about Tobias' patch


Modified Paths:
--
trunk/matplotlib/CHANGELOG
trunk/matplotlib/examples/tests/pngsuite/pngsuite.py
trunk/matplotlib/lib/matplotlib/image.py
trunk/matplotlib/src/_png.cpp

Property Changed:

trunk/matplotlib/


Property changes on: trunk/matplotlib
___
Modified: svnmerge-integrated
   - /branches/v0_91_maint:1-6428 /branches/v0_98_5_maint:1-7025
   + /branches/v0_91_maint:1-6428 /branches/v0_98_5_maint:1-7025,7027-7031

Modified: trunk/matplotlib/CHANGELOG
===
--- trunk/matplotlib/CHANGELOG  2009-04-05 22:09:45 UTC (rev 7031)
+++ trunk/matplotlib/CHANGELOG  2009-04-06 01:52:45 UTC (rev 7032)
@@ -1,3 +1,6 @@
+2009-04-05 _png.read_png() reads 12 bit PNGs (patch from 
+   Tobias Wood) - ADS
+
 2009-04-04 Allow log axis scale to clip non-positive values to
small positive value; this is useful for errorbars. - EF
 

Modified: trunk/matplotlib/examples/tests/pngsuite/pngsuite.py
===
--- trunk/matplotlib/examples/tests/pngsuite/pngsuite.py2009-04-05 
22:09:45 UTC (rev 7031)
+++ trunk/matplotlib/examples/tests/pngsuite/pngsuite.py2009-04-06 
01:52:45 UTC (rev 7032)
@@ -8,6 +8,7 @@
 """
 
 from matplotlib import pyplot as plt
+import matplotlib.cm as cm
 import glob
 
 files = glob.glob("basn*.png")
@@ -17,7 +18,11 @@
 
 for i, fname in enumerate(files):
 data = plt.imread(fname)
-plt.imshow(data, extent=[i,i+1,0,1])
+cmap = None # use default colormap
+if data.ndim==2:
+# keep grayscale images gray
+cmap = cm.gray
+plt.imshow(data, extent=[i,i+1,0,1], cmap=cmap)
 
 plt.gca().get_frame().set_facecolor("#dd")
 plt.gca().set_xlim(0, len(files))

Modified: trunk/matplotlib/lib/matplotlib/image.py
===
--- trunk/matplotlib/lib/matplotlib/image.py2009-04-05 22:09:45 UTC (rev 
7031)
+++ trunk/matplotlib/lib/matplotlib/image.py2009-04-06 01:52:45 UTC (rev 
7032)
@@ -748,8 +748,6 @@
 `_ is installed, it will
 use it to load the image and return an array (if possible) which
 can be used with :func:`~matplotlib.pyplot.imshow`.
-
-TODO: support RGB and grayscale return values in _image.readpng
 """
 
 def pilread():

Modified: trunk/matplotlib/src/_png.cpp
===
--- trunk/matplotlib/src/_png.cpp   2009-04-05 22:09:45 UTC (rev 7031)
+++ trunk/matplotlib/src/_png.cpp   2009-04-06 01:52:45 UTC (rev 7032)
@@ -208,38 +208,37 @@
 
   png_init_io(png_ptr, fp);
   png_set_sig_bytes(png_ptr, 8);
-
   png_read_info(png_ptr, info_ptr);
 
   png_uint_32 width = info_ptr->width;
   png_uint_32 height = info_ptr->height;
-  bool do_gray_conversion = (info_ptr->bit_depth < 8 &&
- info_ptr->color_type == PNG_COLOR_TYPE_GRAY);
 
   int bit_depth = info_ptr->bit_depth;
-  if (bit_depth == 16) {
-png_set_strip_16(png_ptr);
-  } else if (bit_depth < 8) {
+
+  // Unpack 1, 2, and 4-bit images
+  if (bit_depth < 8)
 png_set_packing(png_ptr);
-  }
 
-  // convert misc color types to rgb for simplicity
-  if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY ||
-  info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
-png_set_gray_to_rgb(png_ptr);
-  } else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) {
+  // If sig bits are set, shift data
+  png_color_8p sig_bit;
+  if ((info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) && 
png_get_sBIT(png_ptr, info_ptr, &sig_bit))
+png_set_shift(png_ptr, sig_bit);
+
+  // Convert big endian to little
+  if (bit_depth == 16)
+png_set_swap(png_ptr);
+
+  // Convert palletes to full RGB
+  if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
 png_set_palette_to_rgb(p