void macIcon(iw_context* context, const char* filename) { //16x16 //32x32 //128x128 //256x256 //512x512 //1024x1024 ByteStream stream; iw_iodescr writedescr; memset(&writedescr, 0, sizeof(struct iw_iodescr)); writedescr.write_fn = stream_writefn; writedescr.seek_fn = stream_seekfn; writedescr.fp = &stream; stream.put('i'); stream.put('c'); stream.put('n'); stream.put('s'); stream.put('-'); stream.put('-'); stream.put('-'); stream.put('-'); stream.put('i'); stream.put('c'); stream.put('0'); stream.put('8'); stream.put('-'); stream.put('-'); stream.put('-'); stream.put('-'); scale(context, 256, 256); iw_write_file_by_fmt(context, &writedescr, IW_FORMAT_PNG); int icon08size = static_cast<int>(stream.size() - 8); stream.put('i'); stream.put('c'); stream.put('0'); stream.put('9'); stream.put('-'); stream.put('-'); stream.put('-'); stream.put('-'); scale(context, 512, 512); iw_write_file_by_fmt(context, &writedescr, IW_FORMAT_PNG); int icon09size = static_cast<int>(stream.size() - icon08size - 8); stream.put('i'); stream.put('c'); stream.put('1'); stream.put('0'); stream.put('-'); stream.put('-'); stream.put('-'); stream.put('-'); scale(context, 1024, 1024); iw_write_file_by_fmt(context, &writedescr, IW_FORMAT_PNG); int icon10size = static_cast<int>(stream.size() - icon09size - icon08size - 8); std::vector<byte> size = convertIntToByteArray(static_cast<int>(stream.size())); for (int i = 0; i < 4; ++i) stream.set( 4 + i, size[i]); size = convertIntToByteArray(icon08size); for (int i = 0; i < 4; ++i) stream.set(12 + i, size[i]); size = convertIntToByteArray(icon09size); for (int i = 0; i < 4; ++i) stream.set(icon08size + 8 + 4 + i, size[i]); size = convertIntToByteArray(icon10size); for (int i = 0; i < 4; ++i) stream.set(icon08size + icon09size + 8 + 4 + i, size[i]); stream.save(filename); }
void Ball::exportToWindowsIcon(Path filename, Path directory) { //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)); writeBMP(stream, scale(16, 16, transparent, directory)); writeBMP(stream, scale(32, 32, transparent, directory)); writeBMP(stream, scale(48, 48, transparent, directory)); scale(256, 256, transparent, directory)->save(stream); 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); }
void Ball::exportToMacIcon(Path filename, Path directory) { //16x16 //32x32 //128x128 //256x256 //512x512 //1024x1024 ByteStream stream; stream.put('i'); stream.put('c'); stream.put('n'); stream.put('s'); stream.put('-'); stream.put('-'); stream.put('-'); stream.put('-'); stream.put('i'); stream.put('c'); stream.put('0'); stream.put('8'); stream.put('-'); stream.put('-'); stream.put('-'); stream.put('-'); scale(256, 256, transparent, directory)->save(stream); int icon08size = static_cast<int>(stream.size() - 8); stream.put('i'); stream.put('c'); stream.put('0'); stream.put('9'); stream.put('-'); stream.put('-'); stream.put('-'); stream.put('-'); scale(512, 512, transparent, directory)->save(stream); int icon09size = static_cast<int>(stream.size() - icon08size - 8); stream.put('i'); stream.put('c'); stream.put('1'); stream.put('0'); stream.put('-'); stream.put('-'); stream.put('-'); stream.put('-'); scale(1024, 1024, transparent, directory)->save(stream); int icon10size = static_cast<int>(stream.size() - icon09size - icon08size - 8); std::vector<byte> size = convertIntToByteArray(static_cast<int>(stream.size())); for (int i = 0; i < 4; ++i) stream.set( 4 + i, size[i]); size = convertIntToByteArray(icon08size); for (int i = 0; i < 4; ++i) stream.set(12 + i, size[i]); size = convertIntToByteArray(icon09size); for (int i = 0; i < 4; ++i) stream.set(icon08size + 8 + 4 + i, size[i]); size = convertIntToByteArray(icon10size); for (int i = 0; i < 4; ++i) stream.set(icon08size + icon09size + 8 + 4 + i, size[i]); stream.save(filename); }
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); }