38 FILE* fp = fopen(fname,
"rb");
52 png_structp strct = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
57 png_infop info = png_create_info_struct(strct);
59 png_destroy_read_struct(&strct, NULL, NULL);
65 png_init_io(strct, fp);
67 png_read_png(strct, info, PNG_TRANSFORM_PACKING | PNG_TRANSFORM_STRIP_16, NULL);
69 png.
xs = png_get_image_width(strct, info);
70 png.
ys = png_get_image_height(strct, info);
71 png.
type = png_get_color_type(strct, info);
73 if (png.
type == PNG_COLOR_TYPE_GRAY) png.
col = 1;
74 else if (png.
type == PNG_COLOR_TYPE_GA) png.
col = 2;
75 else if (png.
type == PNG_COLOR_TYPE_RGB) png.
col = 3;
76 else if (png.
type == PNG_COLOR_TYPE_RGBA) png.
col = 4;
78 png_destroy_read_struct(&strct, &info, NULL);
82 int length = png.
xs*png.
ys*png.
col;
84 png.
gp = (
uByte*)malloc(length);
86 png_destroy_read_struct(&strct, &info, NULL);
91 uByte** datap = png_get_rows(strct, info);
93 for (
int j=0; j<png.
ys; j++) {
94 memcpy(png.
gp + j*
len, datap[j],
len);
97 png_destroy_read_struct(&strct, &info, NULL);
124 FILE* fp = fopen(fname,
"wb");
128 png_structp strct = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
131 png_infop info = png_create_info_struct(strct);
133 png_destroy_write_struct(&strct, NULL);
137 if (png->
col==1) png->
type = PNG_COLOR_TYPE_GRAY;
138 else if (png->
col==2) png->
type = PNG_COLOR_TYPE_GA;
139 else if (png->
col==3) png->
type = PNG_COLOR_TYPE_RGB;
140 else if (png->
col==4) png->
type = PNG_COLOR_TYPE_RGBA;
142 png_destroy_write_struct(&strct, &info);
146 png_init_io(strct, fp);
147 png_set_IHDR(strct, info, png->
xs, png->
ys, 8, png->
type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
150 png_destroy_write_struct(&strct, &info);
153 png_set_rows(strct, info, datap);
156 for (
int j=0; j<png->
ys; j++) {
158 if (datap[j]==NULL) {
159 for (
int i=0; i<j; i++) png_free(strct, datap[i]);
160 png_free(strct, datap);
161 png_destroy_write_struct(&strct, &info);
164 memcpy(datap[j], png->
gp + j*
len,
len);
167 png_write_png(strct, info, PNG_TRANSFORM_IDENTITY, NULL);
169 for (
int j=0; j<png->
ys; j++) png_free(strct, datap[j]);
170 png_free(strct, datap);
171 png_destroy_write_struct(&strct, &info);
187 for (k=0; k<png.
col; k++) {
188 int kp = k*png.
xs*png.
ys;
189 for (j=0; j<png.
ys; j++) {
192 int cp = jp*png.
col + k;
193 for (i=0; i<png.
xs; i++) {
214 for (k=0; k<png.
col; k++) {
215 int kp = k*png.
xs*png.
ys;
216 for (j=0; j<png.
ys; j++) {
219 int cp = jp*png.
col + k;
220 for (i=0; i<png.
xs; i++) {
240 int length = png.
xs*png.
ys*png.
col;
242 if (vp.
zs==1) png.
type = PNG_COLOR_TYPE_GRAY;
243 else if (vp.
zs==2) png.
type = PNG_COLOR_TYPE_GA;
244 else if (vp.
zs==3) png.
type = PNG_COLOR_TYPE_RGB;
245 else if (vp.
zs==4) png.
type = PNG_COLOR_TYPE_RGBA;
259 for (k=0; k<png.
col; k++) {
260 int kp = k*png.
xs*png.
ys;
261 for (j=0; j<png.
ys; j++) {
264 int cp = jp*png.
col + k;
265 for (i=0; i<png.
xs; i++) {
286 int length = png.
xs*png.
ys*png.
col;
288 if (vp.
zs==1) png.
type = PNG_COLOR_TYPE_GRAY;
289 else if (vp.
zs==2) png.
type = PNG_COLOR_TYPE_GA;
290 else if (vp.
zs==3) png.
type = PNG_COLOR_TYPE_RGB;
291 else if (vp.
zs==4) png.
type = PNG_COLOR_TYPE_RGBA;
306 for (k=0; k<png.
col; k++) {
307 int kp = k*png.
xs*png.
ys;
308 for (j=0; j<png.
ys; j++) {
311 int cp = jp*png.
col + k;
312 for (i=0; i<png.
xs; i++) {
313 png.
gp[cp + png.
col*i] = vp.
gp[ip + i];
327 if (png==NULL)
return;
328 if (png->
gp!=NULL) free(png->
gp);
BSGraph make_BSGraph(int xs, int ys, int zs)
WSGraph make_WSGraph(int xs, int ys, int zs)
#define JBXL_GRAPH_IVDARG_ERROR
無効な引数
#define JBXL_GRAPH_NODATA_ERROR
データが無い
#define JBXL_GRAPH_OPFILE_ERROR
ファイルのオープンエラー
#define JBXL_GRAPH_IVDCOLOR_ERROR
無効なカラー指定
#define JBXL_GRAPH_HEADER_ERROR
画像ヘッダーのエラー
#define JBXL_GRAPH_MEMORY_ERROR
メモリエラー
int zs
zサイズ. 4Byte. 2Dの場合は 1.
uByte * gp
グラフィックデータへのポインタ. xs*ys*zs*1Byte.
int zs
zサイズ. 4Byte. 2Dの場合は 1.
sWord * gp
グラフィックデータへのポインタ. xs*ys*zs*2Byte.