int iw_write_webp_file(struct iw_context *ctx, struct iw_iodescr *iodescr) { struct iwwebpwritecontext wctx; int retval=0; struct iw_image img1; iw_set_string_table(ctx,IW_STRINGTABLENUM_WEBP,iwwebp_stringtable); memset(&img1,0,sizeof(struct iw_image)); memset(&wctx,0,sizeof(struct iwwebpwritecontext)); wctx.ctx = ctx; wctx.iodescr=iodescr; iw_get_output_image(ctx,&img1); wctx.img = &img1; if(!iwwebp_write_main(&wctx)) { goto done; } retval=1; done: if(!retval) { iw_seterror(ctx,iwwebp_get_string(ctx,iws_webp_write_error)); } if(wctx.iodescr->close_fn) (*wctx.iodescr->close_fn)(ctx,wctx.iodescr); return retval; }
void windowsIcon(iw_context* context, const char* filename) { //16x16 //32x32 //48x48 //256x256 ByteStream stream; writeIcoHeader(stream); writeIconDirEntry(stream, 16, 16, iconHeaderSize + iconDirEntrySize * 4); writeIconDirEntry(stream, 32, 32, iconHeaderSize + iconDirEntrySize * 4 + getBMPSize(16, 16)); writeIconDirEntry(stream, 48, 48, iconHeaderSize + iconDirEntrySize * 4 + getBMPSize(16, 16) + getBMPSize(32, 32)); writeIconDirEntry(stream, 256, 256, iconHeaderSize + iconDirEntrySize * 4 + getBMPSize(16, 16) + getBMPSize(32, 32) + getBMPSize(48, 48)); scale(context, 16, 16); iw_image img; iw_get_output_image(context, &img); writeBMP(stream, &img); scale(context, 32, 32); iw_get_output_image(context, &img); writeBMP(stream, &img); scale(context, 48, 48); iw_get_output_image(context, &img); writeBMP(stream, &img); scale(context, 256, 256); iw_get_output_image(context, &img); iw_iodescr writedescr; memset(&writedescr, 0, sizeof(struct iw_iodescr)); writedescr.write_fn = stream_writefn; writedescr.seek_fn = stream_seekfn; writedescr.fp = &stream; iw_write_file_by_fmt(context, &writedescr, IW_FORMAT_PNG); std::vector<byte> pngSize = convertIntToByteArrayLE(static_cast<int>(stream.size()) - (iconHeaderSize + iconDirEntrySize * 4 + getBMPSize(16, 16) + getBMPSize(32, 32) + getBMPSize(48, 48))); for (int i = 0; i < 4; ++i) stream.set(i + iconHeaderSize + iconDirEntrySize * 3 + 8, pngSize[i]); stream.save(filename); }