Nothing essentially
authorDimitrios Eftaxiopoulos <eftaxi12@otenet.gr>
Thu, 23 Feb 2012 11:35:17 +0000 (13:35 +0200)
committerDimitrios Eftaxiopoulos <eftaxi12@otenet.gr>
Thu, 23 Feb 2012 11:35:17 +0000 (13:35 +0200)
src/data_png.cpp

index b1479e3119193bdf990a070c2880c8c60482b778..f70e85fec0e186a60ced54ecb9bcaee40ddae9b1 100644 (file)
-/***************************************************************************
- * data_png.cpp is part of Math Graphic Library
- * Copyright (C) 2007 Alexey Balakin <balakin@appl.sci-nnov.ru>            *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU Library General Public License as       *
- *   published by the Free Software Foundation; either version 3 of the    *
- *   License, or (at your option) any later version.                       *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU Library General Public     *
- *   License along with this program; if not, write to the                 *
- *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
- ***************************************************************************/
-#include <stdlib.h>
-#ifndef NO_PNG
-#include <png.h>
-#endif
-#include "mgl/data.h"
-//-----------------------------------------------------------------------------
-long mgl_col_dif(unsigned char *c1,unsigned char *c2,bool sum)
-{
-       long res,d1=abs(long(c1[0])-long(c2[0])),
-               d2=abs(long(c1[1])-long(c2[1])),d3=abs(long(c1[2])-long(c2[2]));
-       if(sum) res = d1+d2+d3;
-       else    res = mgl_max(d1,mgl_max(d2,d3));
-       return res;
-}
-//-----------------------------------------------------------------------------
-unsigned char *mgl_create_scheme(const char *scheme,long &num)
-{
-       unsigned char *c=0,*cc=new unsigned char[3*strlen(scheme)+3];
-       long nc=1,np=0;
-       register long i,j;
-       mglColor col;
-       for(i=0;i<long(strlen(scheme));i++)
-       {
-               col = mglColor(scheme[i]);
-               if(col.Valid())
-               {       cc[3*np]=col.r; cc[3*np+1]=col.g;       cc[3*np+2]=col.b;       np++;   }
-       }
-       if(np<2)        {       delete []cc;    return 0;       }
-       for(i=0;i<np-1;i++)     nc+=mgl_col_dif(cc+3*i,cc+3*i+3,false);
-       c = new unsigned char[3*nc+3];
-       long dd,pos=0;
-       for(i=0;i<np-1;i++)
-       {
-               dd=mgl_col_dif(cc+3*i,cc+3*i+3,false);
-               for(j=0;j<dd;j++)
-               {
-                       c[3*(pos+j)] = cc[3*i]+(cc[3*i+3]-cc[3*i])*j/dd;
-                       c[3*(pos+j)+1] = cc[3*i+1]+(cc[3*i+4]-cc[3*i+1])*j/dd;
-                       c[3*(pos+j)+2] = cc[3*i+2]+(cc[3*i+5]-cc[3*i+2])*j/dd;
-               }
-               pos += dd;
-       }
-       memcpy(c+3*nc-3,cc+3*np-3,3*sizeof(unsigned char));
-       delete []cc;
-       num=nc;
-       return c;
-}
-//-----------------------------------------------------------------------------
+/***************************************************************************\r
+ * data_png.cpp is part of Math Graphic Library\r
+ * Copyright (C) 2007 Alexey Balakin <balakin@appl.sci-nnov.ru>            *\r
+ *                                                                         *\r
+ *   This program is free software; you can redistribute it and/or modify  *\r
+ *   it under the terms of the GNU Library General Public License as       *\r
+ *   published by the Free Software Foundation; either version 3 of the    *\r
+ *   License, or (at your option) any later version.                       *\r
+ *                                                                         *\r
+ *   This program is distributed in the hope that it will be useful,       *\r
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *\r
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *\r
+ *   GNU General Public License for more details.                          *\r
+ *                                                                         *\r
+ *   You should have received a copy of the GNU Library General Public     *\r
+ *   License along with this program; if not, write to the                 *\r
+ *   Free Software Foundation, Inc.,                                       *\r
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *\r
+ ***************************************************************************/\r
+#include <stdlib.h>\r
+#ifndef NO_PNG\r
+#include <png.h>\r
+#endif\r
+#include "mgl/data.h"\r
+#include <zlib.h>\r
+//-----------------------------------------------------------------------------\r
+long mgl_col_dif(unsigned char *c1,unsigned char *c2,bool sum)\r
+{\r
+       long res,d1=abs(long(c1[0])-long(c2[0])),\r
+               d2=abs(long(c1[1])-long(c2[1])),d3=abs(long(c1[2])-long(c2[2]));\r
+       if(sum) res = d1+d2+d3;\r
+       else    res = mgl_max(d1,mgl_max(d2,d3));\r
+       return res;\r
+}\r
+//-----------------------------------------------------------------------------\r
+unsigned char *mgl_create_scheme(const char *scheme,long &num)\r
+{\r
+       unsigned char *c=0,*cc=new unsigned char[3*strlen(scheme)+3];\r
+       long nc=1,np=0;\r
+       register long i,j;\r
+       mglColor col;\r
+       for(i=0;i<long(strlen(scheme));i++)\r
+       {\r
+               col = mglColor(scheme[i]);\r
+               if(col.Valid())\r
+               {       cc[3*np]=col.r; cc[3*np+1]=col.g;       cc[3*np+2]=col.b;       np++;   }\r
+       }\r
+       if(np<2)        {       delete []cc;    return 0;       }\r
+       for(i=0;i<np-1;i++)     nc+=mgl_col_dif(cc+3*i,cc+3*i+3,false);\r
+       c = new unsigned char[3*nc+3];\r
+       long dd,pos=0;\r
+       for(i=0;i<np-1;i++)\r
+       {\r
+               dd=mgl_col_dif(cc+3*i,cc+3*i+3,false);\r
+               for(j=0;j<dd;j++)\r
+               {\r
+                       c[3*(pos+j)] = cc[3*i]+(cc[3*i+3]-cc[3*i])*j/dd;\r
+                       c[3*(pos+j)+1] = cc[3*i+1]+(cc[3*i+4]-cc[3*i+1])*j/dd;\r
+                       c[3*(pos+j)+2] = cc[3*i+2]+(cc[3*i+5]-cc[3*i+2])*j/dd;\r
+               }\r
+               pos += dd;\r
+       }\r
+       memcpy(c+3*nc-3,cc+3*np-3,3*sizeof(unsigned char));\r
+       delete []cc;\r
+       num=nc;\r
+       return c;\r
+}\r
+//-----------------------------------------------------------------------------\r
 void mgl_data_import(HMDT d, const char *fname, const char *scheme,float v1,float v2)\r
-{
-       if(v1>=v2)      return;
-       long num=0;
-#ifndef NO_PNG
-       FILE *fp = fopen(fname, "rb");
-       if (!fp)        return;
-       png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
-       if (!png_ptr)   {       fclose(fp);     return; }
-       png_infop info_ptr = png_create_info_struct(png_ptr);
-       if (!info_ptr)
-       {       png_destroy_read_struct(&png_ptr,0,0);  fclose(fp);     return; }
-       png_infop end_info = png_create_info_struct(png_ptr);
-       if (!end_info)
-       {       png_destroy_read_struct(&png_ptr,&info_ptr,0);  fclose(fp);     return; }
-
-       png_init_io(png_ptr, fp);
-       png_read_png(png_ptr, info_ptr,
-               PNG_TRANSFORM_STRIP_ALPHA|PNG_TRANSFORM_PACKING|
-               PNG_TRANSFORM_STRIP_16|PNG_TRANSFORM_EXPAND,0);
-       unsigned char **rows = png_get_rows(png_ptr, info_ptr);
-       unsigned char *c = mgl_create_scheme(scheme,num);
-       if(num>1)
-       {
-               long w=png_get_image_width(png_ptr, info_ptr);
-               long h=png_get_image_height(png_ptr, info_ptr);
-               d->Create(w,h,1);
-               register long i,j,k;
-               long pos=0,val,mval=256;
-               for(i=0;i<d->ny;i++)    for(j=0;j<d->nx;j++)
-               {
-                       for(mval=256,k=0;k<num;k++)
-                       {
-                               val = mgl_col_dif(c+3*k,rows[d->ny-i-1]+3*j,true);
-                               if(val==0)      {       pos=k;  break;  }
-                               if(val<mval)    {       pos=k;  mval=val;       }
-                       }
-                       d->a[j+d->nx*i] = v1 + pos*(v2-v1)/num;
-               }
-       }
-       delete []c;
-       png_destroy_read_struct(&png_ptr, &info_ptr,&end_info);
-       fclose(fp);
-#endif
-}
-//-----------------------------------------------------------------------------
+{\r
+       if(v1>=v2)      return;\r
+       long num=0;\r
+#ifndef NO_PNG\r
+       FILE *fp = fopen(fname, "rb");\r
+       if (!fp)        return;\r
+       png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);\r
+       if (!png_ptr)   {       fclose(fp);     return; }\r
+       png_infop info_ptr = png_create_info_struct(png_ptr);\r
+       if (!info_ptr)\r
+       {       png_destroy_read_struct(&png_ptr,0,0);  fclose(fp);     return; }\r
+       png_infop end_info = png_create_info_struct(png_ptr);\r
+       if (!end_info)\r
+       {       png_destroy_read_struct(&png_ptr,&info_ptr,0);  fclose(fp);     return; }\r
+\r
+       png_init_io(png_ptr, fp);\r
+       png_read_png(png_ptr, info_ptr,\r
+               PNG_TRANSFORM_STRIP_ALPHA|PNG_TRANSFORM_PACKING|\r
+               PNG_TRANSFORM_STRIP_16|PNG_TRANSFORM_EXPAND,0);\r
+       unsigned char **rows = png_get_rows(png_ptr, info_ptr);\r
+       unsigned char *c = mgl_create_scheme(scheme,num);\r
+       if(num>1)\r
+       {\r
+               long w=png_get_image_width(png_ptr, info_ptr);\r
+               long h=png_get_image_height(png_ptr, info_ptr);\r
+               d->Create(w,h,1);\r
+               register long i,j,k;\r
+               long pos=0,val,mval=256;\r
+               for(i=0;i<d->ny;i++)    for(j=0;j<d->nx;j++)\r
+               {\r
+                       for(mval=256,k=0;k<num;k++)\r
+                       {\r
+                               val = mgl_col_dif(c+3*k,rows[d->ny-i-1]+3*j,true);\r
+                               if(val==0)      {       pos=k;  break;  }\r
+                               if(val<mval)    {       pos=k;  mval=val;       }\r
+                       }\r
+                       d->a[j+d->nx*i] = v1 + pos*(v2-v1)/num;\r
+               }\r
+       }\r
+       delete []c;\r
+       png_destroy_read_struct(&png_ptr, &info_ptr,&end_info);\r
+       fclose(fp);\r
+#endif\r
+}\r
+//-----------------------------------------------------------------------------\r
 void mgl_data_export(HCDT dd, const char *fname, const char *scheme,float v1,float v2,long ns)\r
-{
-       register long i,j,k;
-       long nx=dd->GetNx(), ny=dd->GetNy(), nz=dd->GetNz();
-       mreal vv;
-       if(v1>v2)       return;
-       if(ns<0 || ns>=nz)      ns=0;
-       if(v1==v2)
-       {
-               v1 = 1e20;      v2=-1e20;
-               for(i=0;i<nx*ny*nz;i++)
-               {       vv = dd->vthr(i);       if(vv<v1)       v1=vv;  if(vv>v2)       v2=vv;  }
-       }
-       if(v1==v2)      return;
-#ifndef NO_PNG
-       long num=0;
-       unsigned char *c = mgl_create_scheme(scheme,num);
-       if(num<2)       {       delete []c;             return;         }
-
-       unsigned char **p = (unsigned char **)malloc(ny*sizeof(unsigned char *));
-       unsigned char *d = (unsigned char *)malloc(3*nx*ny*sizeof(unsigned char));
-       for(i=0;i<ny;i++)       p[i] = d+3*nx*(ny-1-i);
-       for(i=0;i<ny;i++)       for(j=0;j<nx;j++)
-       {
-               k = long(num*(dd->v(j,i,ns)-v1)/(v2-v1));
-               if(k<0) k=0;    if(k>=num) k=num-1;
-               memcpy(d+3*(j+i*nx),c+3*k,3*sizeof(unsigned char));
-       }
-       delete []c;
-
-       FILE *fp = fopen(fname, "wb");
-       if (!fp)        return;
-       png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
-       if (!png_ptr)   {       fclose(fp);     return; }
-       png_infop info_ptr = png_create_info_struct(png_ptr);
-       if (!info_ptr)
-       {       png_destroy_write_struct(&png_ptr,0);   fclose(fp);     return; }
-       png_init_io(png_ptr, fp);
-       png_set_filter(png_ptr, 0, PNG_ALL_FILTERS);
-       png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
-       png_set_IHDR(png_ptr, info_ptr, nx, ny, 8, PNG_COLOR_TYPE_RGB,
-                       PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
-       png_set_rows(png_ptr, info_ptr, p);
-       png_write_png(png_ptr, info_ptr,  PNG_TRANSFORM_IDENTITY, 0);
-       png_write_end(png_ptr, info_ptr);
-       png_destroy_write_struct(&png_ptr, &info_ptr);
-       fclose(fp);     free(p);        free(d);
-#endif
-}
-//-----------------------------------------------------------------------------
-void mgl_data_export_(uintptr_t *d, const char *fname, const char *scheme,float *v1,float *v2,int *ns,int l,int n)
-{
-       char *s=new char[l+1];  memcpy(s,fname,l);      s[l]=0;
-       char *f=new char[n+1];  memcpy(f,scheme,n);     f[n]=0;
-       mgl_data_export(_DT_,s,f,*v1,*v2,*ns);
-       delete []s;             delete []f;
-}
+{\r
+       register long i,j,k;\r
+       long nx=dd->GetNx(), ny=dd->GetNy(), nz=dd->GetNz();\r
+       mreal vv;\r
+       if(v1>v2)       return;\r
+       if(ns<0 || ns>=nz)      ns=0;\r
+       if(v1==v2)\r
+       {\r
+               v1 = 1e20;      v2=-1e20;\r
+               for(i=0;i<nx*ny*nz;i++)\r
+               {       vv = dd->vthr(i);       if(vv<v1)       v1=vv;  if(vv>v2)       v2=vv;  }\r
+       }\r
+       if(v1==v2)      return;\r
+#ifndef NO_PNG\r
+       long num=0;\r
+       unsigned char *c = mgl_create_scheme(scheme,num);\r
+       if(num<2)       {       delete []c;             return;         }\r
+\r
+       unsigned char **p = (unsigned char **)malloc(ny*sizeof(unsigned char *));\r
+       unsigned char *d = (unsigned char *)malloc(3*nx*ny*sizeof(unsigned char));\r
+       for(i=0;i<ny;i++)       p[i] = d+3*nx*(ny-1-i);\r
+       for(i=0;i<ny;i++)       for(j=0;j<nx;j++)\r
+       {\r
+               k = long(num*(dd->v(j,i,ns)-v1)/(v2-v1));\r
+               if(k<0) k=0;    if(k>=num) k=num-1;\r
+               memcpy(d+3*(j+i*nx),c+3*k,3*sizeof(unsigned char));\r
+       }\r
+       delete []c;\r
+\r
+       FILE *fp = fopen(fname, "wb");\r
+       if (!fp)        return;\r
+       png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);\r
+       if (!png_ptr)   {       fclose(fp);     return; }\r
+       png_infop info_ptr = png_create_info_struct(png_ptr);\r
+       if (!info_ptr)\r
+       {       png_destroy_write_struct(&png_ptr,0);   fclose(fp);     return; }\r
+       png_init_io(png_ptr, fp);\r
+       png_set_filter(png_ptr, 0, PNG_ALL_FILTERS);\r
+       png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);\r
+       png_set_IHDR(png_ptr, info_ptr, nx, ny, 8, PNG_COLOR_TYPE_RGB,\r
+                       PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);\r
+       png_set_rows(png_ptr, info_ptr, p);\r
+       png_write_png(png_ptr, info_ptr,  PNG_TRANSFORM_IDENTITY, 0);\r
+       png_write_end(png_ptr, info_ptr);\r
+       png_destroy_write_struct(&png_ptr, &info_ptr);\r
+       fclose(fp);     free(p);        free(d);\r
+#endif\r
+}\r
+//-----------------------------------------------------------------------------\r
+void mgl_data_export_(uintptr_t *d, const char *fname, const char *scheme,float *v1,float *v2,int *ns,int l,int n)\r
+{\r
+       char *s=new char[l+1];  memcpy(s,fname,l);      s[l]=0;\r
+       char *f=new char[n+1];  memcpy(f,scheme,n);     f[n]=0;\r
+       mgl_data_export(_DT_,s,f,*v1,*v2,*ns);\r
+       delete []s;             delete []f;\r
+}\r
 void mgl_data_import_(uintptr_t *d, const char *fname, const char *scheme,float *v1,float *v2,int l,int n)\r
-{
-       char *s=new char[l+1];  memcpy(s,fname,l);      s[l]=0;
-       char *f=new char[n+1];  memcpy(f,scheme,n);     f[n]=0;
-       mgl_data_import(_DT_,s,f,*v1,*v2);
-       delete []s;             delete []f;
-}
-//-----------------------------------------------------------------------------
+{\r
+       char *s=new char[l+1];  memcpy(s,fname,l);      s[l]=0;\r
+       char *f=new char[n+1];  memcpy(f,scheme,n);     f[n]=0;\r
+       mgl_data_import(_DT_,s,f,*v1,*v2);\r
+       delete []s;             delete []f;\r
+}\r
+//-----------------------------------------------------------------------------\r