# HG changeset patch # User jwe # Date 1171532967 0 # Node ID 6a60e68fc4b1d79b22e9e860736bdf5ca4cc7e60 # Parent 22e2c78e406eaf2f50d1c53263c02d94a2375fc1 [project @ 2007-02-15 09:49:27 by jwe] diff -r 22e2c78e406e -r 6a60e68fc4b1 scripts/ChangeLog --- a/scripts/ChangeLog Thu Feb 15 08:16:09 2007 +0000 +++ b/scripts/ChangeLog Thu Feb 15 09:49:27 2007 +0000 @@ -1,5 +1,12 @@ 2007-02-15 Daniel J Sebald + * plot/__uiobject_image_ctor__.m: Set xdata and ydata properties. + * image/__img__.m: New file containing common parts of image.m and + imshow.m. + * image/image.m, image/imshow.m: Call __img__. + * plot/__uiobject_draw_axes__.m: + Handle rgb imaged data stored in 3-d arrays. + * plot/figure.m: Doc fix. 2007-02-14 Thomas Weber diff -r 22e2c78e406e -r 6a60e68fc4b1 scripts/image/image.m --- a/scripts/image/image.m Thu Feb 15 08:16:09 2007 +0000 +++ b/scripts/image/image.m Thu Feb 15 09:49:27 2007 +0000 @@ -56,33 +56,7 @@ print_usage (); endif - if (isempty (img)) - error ("image: matrix is empty"); - endif - - ## Use the newly added mode of "plot" called "with image". - if (isempty (x)) - x = [1, columns(img)]; - endif - - if (isempty (y)) - y = [1, rows(img)]; - endif - - ca = gca (); - - s = __uiobject_image_ctor__ (ca); - - s.cdata = img; - - tmp = __uiobject_make_handle__ (s); - - __uiobject_adopt__ (ca, tmp); - - xlim = [x(1), x(end)]; - ylim = [y(1), y(end)]; - - set (ca, "view", [0, 90], "xlim", xlim, "ylim", ylim); + tmp = __img__ (x, y, img); if (nargout > 0) h = tmp; diff -r 22e2c78e406e -r 6a60e68fc4b1 scripts/image/imshow.m --- a/scripts/image/imshow.m Thu Feb 15 08:16:09 2007 +0000 +++ b/scripts/image/imshow.m Thu Feb 15 09:49:27 2007 +0000 @@ -23,7 +23,7 @@ ## @deftypefnx {Function File} {} imshow (@var{im}, @var{map}) ## @deftypefnx {Function File} {} imshow (@var{R}, @var{G}, @var{B}, @dots{}) ## @deftypefnx {Function File} {} imshow (@var{filename}) -## @deftypefnx {Function File} {} imshow (@dots{}, @var{string_param1}, @var{value1}, ...) +## @deftypefnx {Function File} {} imshow (@dots{}, @var{string_param1}, @var{value1}, @dots{}) ## Display the image @var{im}, where @var{im} can a 2-dimensional ## (gray-scale image) or a 3-dimensional (RGB image) matrix. If three matrices ## of the same size are given as arguments, they will be concatenated into @@ -146,21 +146,21 @@ im(im > 1) = 1; endif - ## Convert to indexed image. dim = ndims (im); if (dim == 2) im = round ((size (color_map, 1) - 1) * im); + colormap (color_map); + image (im, initial_magnification/100); + colormap (old_colormap); elseif (dim == 3 && size (im, 3) == 3) - [im, color_map] = rgb2ind (im); + __img__ ([] , [], im); + ## FIXME -- needed anymore for a special case? + ## Convert to indexed image. + ## [im, color_map] = rgb2ind (im); else error ("imshow: input image must be a 2D or 3D matrix"); endif - ## And now, we show the image. - colormap (color_map); - image (im, initial_magnification/100); - colormap (old_colormap); - endfunction %!error imshow () # no arguments diff -r 22e2c78e406e -r 6a60e68fc4b1 scripts/plot/__uiobject_draw_axes__.m --- a/scripts/plot/__uiobject_draw_axes__.m Thu Feb 15 08:16:09 2007 +0000 +++ b/scripts/plot/__uiobject_draw_axes__.m Thu Feb 15 09:49:27 2007 +0000 @@ -30,6 +30,8 @@ axis_obj = get (h); + parent_figure_obj = get (axis_obj.parent); + ## Set axis properties here? if (! isempty (axis_obj.outerposition)) @@ -222,7 +224,6 @@ data = cell (); have_img_data = false; - img_data = []; xminp = yminp = zminp = Inf; xmax = ymax = zmax = -Inf; @@ -239,7 +240,9 @@ endif have_img_data = true; img_data = obj.cdata; - + img_colormap = parent_figure_obj.colormap; + img_xdata = obj.xdata; + img_ydata = obj.ydata; case "line" data_idx++; @@ -552,28 +555,58 @@ if (ischar (view_fcn) && strcmp (view_fcn, "gnuplot_internal")) have_data = true; - [y_dim, x_dim] = size (img_data); + [y_dim, x_dim] = size (img_data(:,:,1)); if (x_dim > 1) - dx = abs (xlim(2)-xlim(1))/(x_dim-1); + dx = abs (img_xdata(2)-img_xdata(1))/(x_dim-1); else dx = 1; endif if (y_dim > 1) - dy = abs (ylim(2)-ylim(1))/(y_dim-1); + dy = abs (img_ydata(2)-img_ydata(1))/(y_dim-1); else dy = 1; endif - x_origin = min (xlim); - y_origin = min (ylim); + x_origin = min (img_xdata); + y_origin = min (img_ydata); ## Let the file be deleted when Octave exits or `purge_tmp_files' ## is called. [fid, fname] = mkstemp (strcat (P_tmpdir, "/gpimageXXXXXX"), 1); - fwrite (fid, img_data(:), "float"); + if (ndims (img_data) == 3) + fwrite (fid, permute (img_data, [3, 1, 2])(:), "float"); + format = "1:2:3"; + imagetype = "rgbimage"; + else + fwrite (fid, img_data(:), "float"); + format = "1"; + imagetype = "image"; + palette_size = rows (img_colormap); + fprintf (plot_stream, + "set palette positive color model RGB maxcolors %i;\n", + palette_size); + if (palette_size <= 128) + ## Break up command to avoid buffer overflow. + fprintf (plot_stream, "set palette file \"-\" using 1:2:3:4;\n"); + for i = 1:palette_size + fprintf (plot_stream, "%g %g %g %g;\n", + 1e-3*round (1e3*[(i-1)/(palette_size-1), img_colormap(i,:)])); + end + fprintf (plot_stream, "e;\n"); + else + # Let the file be deleted when Octave exits or `purge_tmp_files' is called. + [fid, binary_fname, msg] = mkstemp (strcat (P_tmpdir, "/gpimageXXXXXX"), 1); + fwrite (fid, img_colormap', "float32", 0, "ieee-le"); + fclose (fid); + fprintf (plot_stream, + "set palette file \"%s\" binary record=%d using 1:2:3;\n", + binary_fname, palette_size); + endif + endif fclose (fid); - fprintf (plot_stream, "plot \"%s\" binary array=%dx%d scan=yx flipy origin=(%g,%g) dx=%g dy=%g using 1 with image", - fname, x_dim, y_dim, x_origin, y_origin, dx, dy); + fprintf (plot_stream, + "plot \"%s\" binary array=%dx%d scan=yx flipy origin=(%g,%g) dx=%g dy=%g using %s with %s", + fname, x_dim, y_dim, x_origin, y_origin, dx, dy, format, imagetype); plot_cmd = ","; else diff -r 22e2c78e406e -r 6a60e68fc4b1 scripts/plot/__uiobject_image_ctor__.m --- a/scripts/plot/__uiobject_image_ctor__.m Thu Feb 15 08:16:09 2007 +0000 +++ b/scripts/plot/__uiobject_image_ctor__.m Thu Feb 15 09:49:27 2007 +0000 @@ -32,6 +32,8 @@ s.children = []; s.cdata = []; + s.xdata = []; + s.ydata = []; ## XXX FIXME XXX -- need to intialize all properties to default ## values here.