in src/main/java/org/apache/commons/imaging/formats/xbm/XbmImageParser.java [343:416]
public void writeImage(BufferedImage src, OutputStream os, Map params)
throws ImageWriteException, IOException
{
// make copy of params; we'll clear keys as we consume them.
params = (params == null) ? new HashMap() : new HashMap(params);
// clear format key.
if (params.containsKey(PARAM_KEY_FORMAT))
params.remove(PARAM_KEY_FORMAT);
if (params.size() > 0)
{
Object firstKey = params.keySet().iterator().next();
throw new ImageWriteException("Unknown parameter: " + firstKey);
}
String name = randomName();
os.write(("#define " + name + "_width " + src.getWidth() + "\n").getBytes("US-ASCII"));
os.write(("#define " + name + "_height " + src.getHeight() + "\n").getBytes("US-ASCII"));
os.write(("static unsigned char " + name + "_bits[] = {").getBytes("US-ASCII"));
int bitcache = 0;
int bits_in_cache = 0;
String separator = "\n ";
int written = 0;
for (int y = 0; y < src.getHeight(); y++)
{
for (int x = 0; x < src.getWidth(); x++)
{
int argb = src.getRGB(x, y);
int red = 0xff & (argb >> 16);
int green = 0xff & (argb >> 8);
int blue = 0xff & (argb >> 0);
int sample = (red + green + blue) / 3;
if (sample > 127)
sample = 0;
else
sample = 1;
bitcache |= (sample << bits_in_cache);
++bits_in_cache;
if (bits_in_cache == 8)
{
os.write(separator.getBytes("US-ASCII"));
separator = ",";
if (written == 12)
{
os.write("\n ".getBytes("US-ASCII"));
written = 0;
}
os.write(toPrettyHex(bitcache).getBytes("US-ASCII"));
bitcache = 0;
bits_in_cache = 0;
++written;
}
}
if (bits_in_cache != 0)
{
os.write(separator.getBytes("US-ASCII"));
separator = ",";
if (written == 12)
{
os.write("\n ".getBytes("US-ASCII"));
written = 0;
}
os.write(toPrettyHex(bitcache).getBytes("US-ASCII"));
bitcache = 0;
bits_in_cache = 0;
++written;
}
}
os.write("\n};\n".getBytes("US-ASCII"));
}