package org.openslx.satserver.util; import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; public class Ppm { /** * Save image as ppm file. * * @param inImage BufferedImage to save * @param fName file name to save as * @param white * @throws IOException */ public static boolean write( BufferedImage inImage, String fName, Color transparent ) throws IOException { FileOutputStream bw = null; final int tr = transparent.getRed(); final int tg = transparent.getGreen(); final int tb = transparent.getBlue(); try { File theFile = new File( fName ); bw = new FileOutputStream( theFile ); bw.write( "P6\n".getBytes( StandardCharsets.UTF_8 ) ); bw.write( ( inImage.getWidth() + " " + inImage.getHeight() + " 255\n" ).getBytes( StandardCharsets.UTF_8 ) ); for ( int y = 0; y < inImage.getHeight(); ++y ) { for ( int x = 0; x < inImage.getWidth(); ++x ) { int color = inImage.getRGB( x, y ); int alpha = ( color >>> 24 ) & 0xFF; int red = ( color >>> 16 ) & 0xFF; int green = ( color >>> 8 ) & 0xFF; int blue = ( color ) & 0xFF; bw.write( ( ( red * alpha ) + ( tr * ( 255 - alpha ) ) ) / 255 ); bw.write( ( ( green * alpha ) + ( tg * ( 255 - alpha ) ) ) / 255 ); bw.write( ( ( blue * alpha ) + ( tb * ( 255 - alpha ) ) ) / 255 ); } } bw.close(); } finally { Util.multiClose( bw ); } return true; } }