/** * The Paeth predictor routine used in PNG encoding. This routine * is included as a convenience to subclasses that override the * <code>filterRow</code> method. */ public static final int paethPredictor(int a, int b, int c) { int p = a + b - c; int pa = abs(p - a); int pb = abs(p - b); int pc = abs(p - c); if ((pa <= pb) && (pa <= pc)) { return a; } else if (pb <= pc) { return b; } else { return c; } }
private void writeCHRM() throws IOException { if (param.isChromaticitySet() || param.isSRGBIntentSet()) { ChunkStream cs = new ChunkStream("cHRM"); float[] chroma; if (!param.isSRGBIntentSet()) { chroma = param.getChromaticity(); } else { chroma = srgbChroma; // SRGB chromaticities } for (int i = 0; i < 8; i++) { cs.writeInt((int)(chroma[i]*100000)); } cs.writeToStream(dataOutput); cs.close(); } }
private void writeGAMA() throws IOException { if (param.isGammaSet() || param.isSRGBIntentSet()) { ChunkStream cs = new ChunkStream("gAMA"); float gamma; if (!param.isSRGBIntentSet()) { gamma = param.getGamma(); } else { gamma = 1.0F/2.2F; // SRGB gamma } // TD should include the .5 but causes regard to say // everything is different. cs.writeInt((int)(gamma*100000/*+0.5*/)); cs.writeToStream(dataOutput); cs.close(); } }
private void writeICCP() throws IOException { if (param.isICCProfileDataSet()) { ChunkStream cs = new ChunkStream("iCCP"); byte[] ICCProfileData = param.getICCProfileData(); cs.write(ICCProfileData); cs.writeToStream(dataOutput); cs.close(); } }
PNGEncodeParam params = PNGEncodeParam.getDefaultEncodeParam(img); if (params instanceof PNGEncodeParam.RGB) { ((PNGEncodeParam.RGB)params).setBackgroundRGB float gamma = ((Float)hints.get(PNGTranscoder.KEY_GAMMA)).floatValue(); if (gamma > 0) { params.setGamma(gamma); params.setChromaticity(PNGTranscoder.DEFAULT_CHROMA); } else { params.setSRGBIntent(PNGEncodeParam.INTENT_PERCEPTUAL); params.setPhysicalDimension(numPix, numPix, 1); // 1 means 'pix/meter'
private void writeZTXT() throws IOException { if (param.isCompressedTextSet()) { String[] text = param.getCompressedText(); for (int i = 0; i < text.length/2; i++) { byte[] keyword = text[2*i].getBytes(); byte[] value = text[2*i + 1].getBytes(); ChunkStream cs = new ChunkStream("zTXt"); cs.write(keyword, 0, Math.min(keyword.length, 79)); cs.write(0); cs.write(0); DeflaterOutputStream dos = new DeflaterOutputStream(cs); dos.write(value); dos.finish(); dos.close(); cs.writeToStream(dataOutput); cs.close(); } } }
private void writeTIME() throws IOException { if (param.isModificationTimeSet()) { ChunkStream cs = new ChunkStream("tIME"); Date date = param.getModificationTime(); TimeZone gmt = TimeZone.getTimeZone("GMT"); GregorianCalendar cal = new GregorianCalendar(gmt); cal.setTime(date); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DAY_OF_MONTH); int hour = cal.get(Calendar.HOUR_OF_DAY); int minute = cal.get(Calendar.MINUTE); int second = cal.get(Calendar.SECOND); cs.writeShort(year); cs.writeByte(month + 1); cs.writeByte(day); cs.writeByte(hour); cs.writeByte(minute); cs.writeByte(second); cs.writeToStream(dataOutput); cs.close(); } }
if (param.isTransparencySet()) { skipAlpha = true; numBands = 1; param = new PNGEncodeParam.RGB(); if (param.isTransparencySet()) { skipAlpha = true; numBands = 3; interlace = param.getInterlacing();
byte[] data = chunk.getData(); if (encodeParam != null) { encodeParam.addPrivateChunk(type, data);
int filterType = param.filterRow(currRow, prevRow, filteredRows, bytesPerRow, bpp);
PNGEncodeParam params = PNGEncodeParam.getDefaultEncodeParam(img); if (params instanceof PNGEncodeParam.RGB) { ((PNGEncodeParam.RGB)params).setBackgroundRGB float gamma = ((Float)hints.get(PNGTranscoder.KEY_GAMMA)).floatValue(); if (gamma > 0) { params.setGamma(gamma); params.setChromaticity(PNGTranscoder.DEFAULT_CHROMA); } else { params.setSRGBIntent(PNGEncodeParam.INTENT_PERCEPTUAL); params.setPhysicalDimension(numPix, numPix, 1); // 1 means 'pix/meter'
private void writeICCP() throws IOException { if (param.isICCProfileDataSet()) { ChunkStream cs = new ChunkStream("iCCP"); byte[] ICCProfileData = param.getICCProfileData(); cs.write(ICCProfileData); cs.writeToStream(dataOutput); cs.close(); } }
private void writeZTXT() throws IOException { if (param.isCompressedTextSet()) { String[] text = param.getCompressedText(); for (int i = 0; i < text.length/2; i++) { byte[] keyword = text[2*i].getBytes(); byte[] value = text[2*i + 1].getBytes(); ChunkStream cs = new ChunkStream("zTXt"); cs.write(keyword, 0, Math.min(keyword.length, 79)); cs.write(0); cs.write(0); DeflaterOutputStream dos = new DeflaterOutputStream(cs); dos.write(value); dos.finish(); dos.close(); cs.writeToStream(dataOutput); cs.close(); } } }
private void writeTIME() throws IOException { if (param.isModificationTimeSet()) { ChunkStream cs = new ChunkStream("tIME"); Date date = param.getModificationTime(); TimeZone gmt = TimeZone.getTimeZone("GMT"); GregorianCalendar cal = new GregorianCalendar(gmt); cal.setTime(date); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DAY_OF_MONTH); int hour = cal.get(Calendar.HOUR_OF_DAY); int minute = cal.get(Calendar.MINUTE); int second = cal.get(Calendar.SECOND); cs.writeShort(year); cs.writeByte(month + 1); cs.writeByte(day); cs.writeByte(hour); cs.writeByte(minute); cs.writeByte(second); cs.writeToStream(dataOutput); cs.close(); } }
if (param.isTransparencySet()) { skipAlpha = true; numBands = 1; param = new PNGEncodeParam.RGB(); if (param.isTransparencySet()) { skipAlpha = true; numBands = 3; interlace = param.getInterlacing();
byte[] data = chunk.getData(); if (encodeParam != null) { encodeParam.addPrivateChunk(type, data);
int filterType = param.filterRow(currRow, prevRow, filteredRows, bytesPerRow, bpp);
PNGEncodeParam params = PNGEncodeParam.getDefaultEncodeParam(img); if (params instanceof PNGEncodeParam.RGB) { ((PNGEncodeParam.RGB)params).setBackgroundRGB float gamma = (Float) hints.get(PNGTranscoder.KEY_GAMMA); if (gamma > 0) { params.setGamma(gamma); params.setChromaticity(PNGTranscoder.DEFAULT_CHROMA); } else { params.setSRGBIntent(PNGEncodeParam.INTENT_PERCEPTUAL); params.setPhysicalDimension(numPix, numPix, 1); // 1 means 'pix/meter'
private void writeCHRM() throws IOException { if (param.isChromaticitySet() || param.isSRGBIntentSet()) { ChunkStream cs = new ChunkStream("cHRM"); float[] chroma; if (!param.isSRGBIntentSet()) { chroma = param.getChromaticity(); } else { chroma = srgbChroma; // SRGB chromaticities } for (int i = 0; i < 8; i++) { cs.writeInt((int)(chroma[i]*100000)); } cs.writeToStream(dataOutput); cs.close(); } }
private void writeGAMA() throws IOException { if (param.isGammaSet() || param.isSRGBIntentSet()) { ChunkStream cs = new ChunkStream("gAMA"); float gamma; if (!param.isSRGBIntentSet()) { gamma = param.getGamma(); } else { gamma = 1.0F/2.2F; // SRGB gamma } // TD should include the .5 but causes regard to say // everything is different. cs.writeInt((int)(gamma*100000/*+0.5*/)); cs.writeToStream(dataOutput); cs.close(); } }