@@ -173,7 +173,7 @@ STBIWDEF int stbi_write_force_png_filter;
173
173
#endif
174
174
175
175
#ifndef STBI_WRITE_NO_STDIO
176
- STBIWDEF int stbi_write_png (char const * filename , int w , int h , int comp , const void * data , int stride_in_bytes );
176
+ STBIWDEF int stbi_write_png (char const * filename , int w , int h , int comp , const void * data , int stride_in_bytes , const char * parameters = NULL );
177
177
STBIWDEF int stbi_write_bmp (char const * filename , int w , int h , int comp , const void * data );
178
178
STBIWDEF int stbi_write_tga (char const * filename , int w , int h , int comp , const void * data );
179
179
STBIWDEF int stbi_write_hdr (char const * filename , int w , int h , int comp , const float * data );
@@ -1125,9 +1125,10 @@ static void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int
1125
1125
}
1126
1126
}
1127
1127
1128
- STBIWDEF unsigned char * stbi_write_png_to_mem (const unsigned char * pixels , int stride_bytes , int x , int y , int n , int * out_len )
1128
+ STBIWDEF unsigned char * stbi_write_png_to_mem (const unsigned char * pixels , int stride_bytes , int x , int y , int n , int * out_len , const char * parameters )
1129
1129
{
1130
1130
int force_filter = stbi_write_force_png_filter ;
1131
+ int param_length = 0 ;
1131
1132
int ctype [5 ] = { -1 , 0 , 4 , 2 , 6 };
1132
1133
unsigned char sig [8 ] = { 137 ,80 ,78 ,71 ,13 ,10 ,26 ,10 };
1133
1134
unsigned char * out ,* o , * filt , * zlib ;
@@ -1177,10 +1178,15 @@ STBIWDEF unsigned char *stbi_write_png_to_mem(const unsigned char *pixels, int s
1177
1178
STBIW_FREE (filt );
1178
1179
if (!zlib ) return 0 ;
1179
1180
1181
+ if (parameters != NULL ) {
1182
+ param_length = strlen (parameters );
1183
+ param_length += strlen ("parameters" ) + 1 ; // For the name and the null-byte
1184
+ }
1185
+
1180
1186
// each tag requires 12 bytes of overhead
1181
- out = (unsigned char * ) STBIW_MALLOC (8 + 12 + 13 + 12 + zlen + 12 );
1187
+ out = (unsigned char * ) STBIW_MALLOC (8 + 12 + 13 + 12 + zlen + 12 + (( parameters )?( param_length + 12 ): 0 ) );
1182
1188
if (!out ) return 0 ;
1183
- * out_len = 8 + 12 + 13 + 12 + zlen + 12 ;
1189
+ * out_len = 8 + 12 + 13 + 12 + zlen + 12 + (( parameters )?( param_length + 12 ): 0 ) ;
1184
1190
1185
1191
o = out ;
1186
1192
STBIW_MEMMOVE (o ,sig ,8 ); o += 8 ;
@@ -1195,6 +1201,17 @@ STBIWDEF unsigned char *stbi_write_png_to_mem(const unsigned char *pixels, int s
1195
1201
* o ++ = 0 ;
1196
1202
stbiw__wpcrc (& o ,13 );
1197
1203
1204
+ if (parameters != NULL ) {
1205
+ stbiw__wp32 (o , param_length );
1206
+ stbiw__wptag (o , "tEXt" );
1207
+ STBIW_MEMMOVE (o , "parameters" , strlen ("parameters" ));
1208
+ o += strlen ("parameters" );
1209
+ * o ++ = 0 ; // Null pyte separator
1210
+ STBIW_MEMMOVE (o , parameters , strlen (parameters ));
1211
+ o += strlen (parameters );
1212
+ stbiw__wpcrc (& o , param_length );
1213
+ }
1214
+
1198
1215
stbiw__wp32 (o , zlen );
1199
1216
stbiw__wptag (o , "IDAT" );
1200
1217
STBIW_MEMMOVE (o , zlib , zlen );
@@ -1212,11 +1229,11 @@ STBIWDEF unsigned char *stbi_write_png_to_mem(const unsigned char *pixels, int s
1212
1229
}
1213
1230
1214
1231
#ifndef STBI_WRITE_NO_STDIO
1215
- STBIWDEF int stbi_write_png (char const * filename , int x , int y , int comp , const void * data , int stride_bytes )
1232
+ STBIWDEF int stbi_write_png (char const * filename , int x , int y , int comp , const void * data , int stride_bytes , const char * parameters )
1216
1233
{
1217
1234
FILE * f ;
1218
1235
int len ;
1219
- unsigned char * png = stbi_write_png_to_mem ((const unsigned char * ) data , stride_bytes , x , y , comp , & len );
1236
+ unsigned char * png = stbi_write_png_to_mem ((const unsigned char * ) data , stride_bytes , x , y , comp , & len , parameters );
1220
1237
if (png == NULL ) return 0 ;
1221
1238
1222
1239
f = stbiw__fopen (filename , "wb" );
@@ -1231,7 +1248,7 @@ STBIWDEF int stbi_write_png(char const *filename, int x, int y, int comp, const
1231
1248
STBIWDEF int stbi_write_png_to_func (stbi_write_func * func , void * context , int x , int y , int comp , const void * data , int stride_bytes )
1232
1249
{
1233
1250
int len ;
1234
- unsigned char * png = stbi_write_png_to_mem ((const unsigned char * ) data , stride_bytes , x , y , comp , & len );
1251
+ unsigned char * png = stbi_write_png_to_mem ((const unsigned char * ) data , stride_bytes , x , y , comp , & len , NULL );
1235
1252
if (png == NULL ) return 0 ;
1236
1253
func (context , png , len );
1237
1254
STBIW_FREE (png );
0 commit comments