summaryrefslogtreecommitdiff
blob: f766fb14e02a4760ae0590281bfd40fa22372c5c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
--- a/rwimg/rwpng.c
+++ b/rwimg/rwpng.c
@@ -42,6 +42,7 @@
 open_png_file_reading (const char *filename, int *width, int *height)
 {
     png_data_t *data = (png_data_t*)malloc(sizeof(png_data_t));
+    int _bit_depth,_color_type,_interlace_type,_compression,_filter;
 
     assert(data != 0);
 
@@ -57,19 +58,20 @@
     data->end_info = png_create_info_struct(data->png_ptr);
     assert(data->end_info != 0);
 
-    if (setjmp(data->png_ptr->jmpbuf))
+    if (setjmp(png_jmpbuf(data->png_ptr)))
 	assert(0);
 
     png_init_io(data->png_ptr, data->file);
 
     png_read_info(data->png_ptr, data->info_ptr);
 
-    *width = data->info_ptr->width;
-    *height = data->info_ptr->height;
-
-    assert(data->info_ptr->bit_depth == 8 || data->info_ptr->bit_depth == 16);
-    assert(data->info_ptr->color_type == PNG_COLOR_TYPE_RGB || data->info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA);
-    assert(data->info_ptr->interlace_type == PNG_INTERLACE_NONE);
+    png_get_IHDR(data->png_ptr,data->info_ptr,
+        (png_uint_32 *)width,(png_uint_32 *)height,
+        &_bit_depth,&_color_type,&_interlace_type,&_compression,&_filter);
+
+    assert(_bit_depth == 8 || _bit_depth == 16);
+    assert(_color_type == PNG_COLOR_TYPE_RGB || _color_type == PNG_COLOR_TYPE_RGB_ALPHA);
+    assert(_interlace_type == PNG_INTERLACE_NONE);
 
     data->have_read = 0;
 
@@ -83,30 +85,36 @@
     int i;
     int bps, spp;
     unsigned char *row;
+    png_uint_32 _width,_height;
+    int _bit_depth,_color_type,_interlace_type,_compression,_filter;
 
-    if (setjmp(data->png_ptr->jmpbuf))
+    if (setjmp(png_jmpbuf(data->png_ptr)))
 	assert(0);
 
-    if (data->info_ptr->color_type == PNG_COLOR_TYPE_RGB)
+    png_get_IHDR(data->png_ptr,data->info_ptr,
+        &_width,&_height,&_bit_depth,&_color_type,&_interlace_type,
+        &_compression,&_filter);
+
+    if (_color_type == PNG_COLOR_TYPE_RGB)
 	spp = 3;
     else
 	spp = 4;
 
-    if (data->info_ptr->bit_depth == 16)
+    if (_bit_depth == 16)
 	bps = 2;
     else
 	bps = 1;
 
-    row = (unsigned char*)malloc(data->info_ptr->width * spp * bps);
+    row = (unsigned char*)malloc(_width * spp * bps);
 
     for (i = 0; i < num_lines; ++i)
     {
 	int j, channel;
 
 	png_read_row(data->png_ptr, (png_bytep)row, 0);
-	for (j = 0; j < data->info_ptr->width; ++j)
+	for (j = 0; j < _width; ++j)
 	    for (channel = 0; channel < 3; ++channel)
-		lines[i * data->info_ptr->width * 3 + j * 3 + channel] = row[j * spp * bps + channel * bps];
+		lines[i * _width * 3 + j * 3 + channel] = row[j * spp * bps + channel * bps];
     }
 
     free(row);
@@ -119,7 +127,7 @@
 {
     png_data_t *data = (png_data_t*)_data;
 
-    if (setjmp(data->png_ptr->jmpbuf))
+    if (setjmp(png_jmpbuf(data->png_ptr)))
 	assert(0);
 
     if (data->have_read)
@@ -148,7 +156,7 @@
     data->info_ptr = png_create_info_struct(data->png_ptr);
     assert(data->info_ptr != 0);
 
-    if (setjmp(data->png_ptr->jmpbuf))
+    if (setjmp(png_jmpbuf(data->png_ptr)))
 	assert(0);
 
     if (pixel_stride == 4)
@@ -156,18 +164,14 @@
 
     png_init_io(data->png_ptr, data->file);
 
-    data->info_ptr->width = width;
-    data->info_ptr->height = height;
-    data->info_ptr->valid = 0;
+    png_set_IHDR(data->png_ptr,data->info_ptr,width,height,
+        8,PNG_COLOR_TYPE_RGB,PNG_INTERLACE_NONE,
+        PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
+    /* setting these to 0 so just skipping ...
     data->info_ptr->rowbytes = width * 3;
     data->info_ptr->palette = 0;
     data->info_ptr->num_palette = 0;
-    data->info_ptr->num_trans = 0;
-    data->info_ptr->bit_depth = 8;
-    data->info_ptr->color_type = PNG_COLOR_TYPE_RGB;
-    data->info_ptr->compression_type = PNG_COMPRESSION_TYPE_DEFAULT;
-    data->info_ptr->filter_type = PNG_FILTER_TYPE_DEFAULT;
-    data->info_ptr->interlace_type = PNG_INTERLACE_NONE;
+    data->info_ptr->num_trans = 0; */
 
     png_write_info(data->png_ptr, data->info_ptr);
 
@@ -182,7 +186,7 @@
     png_data_t *data = (png_data_t*)_data;
     int i;
 
-    if (setjmp(data->png_ptr->jmpbuf))
+    if (setjmp(png_jmpbuf(data->png_ptr)))
 	assert(0);
 
     for (i = 0; i < num_lines; ++i)
@@ -194,7 +198,7 @@
 {
     png_data_t *data = (png_data_t*)_data;
 
-    if (setjmp(data->png_ptr->jmpbuf))
+    if (setjmp(png_jmpbuf(data->png_ptr)))
 	assert(0);
 
     png_write_end(data->png_ptr, data->info_ptr);