in src/main/java/org/apache/commons/imaging/formats/psd/PsdImageParser.java [122:217]
public BufferedImage getBufferedImage(final ByteSource byteSource, final PsdImagingParameters params) throws ImagingException, IOException {
final PsdImageContents imageContents = readImageContents(byteSource);
// ImageContents imageContents = readImage(byteSource, false);
final PsdHeaderInfo header = imageContents.header;
if (header == null) {
throw new ImagingException("PSD: Couldn't read Header");
}
// ImageDescriptor id = (ImageDescriptor)
// findBlock(fImageContents.blocks,
// kImageSeperator);
// if (id == null)
// throw new ImageReadException("PSD: Couldn't read Image Descriptor");
// GraphicControlExtension gce = (GraphicControlExtension) findBlock(
// fImageContents.blocks, kGraphicControlExtension);
readImageResourceBlocks(byteSource,
// fImageContents.ImageResources,
null, -1);
final int width = header.columns;
final int height = header.rows;
// int height = header.Columns;
// int transfer_type;
// transfer_type = DataBuffer.TYPE_BYTE;
final boolean hasAlpha = false;
final BufferedImage result = getBufferedImageFactory(params).getColorBufferedImage(width, height, hasAlpha);
final AbstractDataParser dataParser;
switch (imageContents.header.mode) {
case 0: // bitmap
dataParser = new DataParserBitmap();
break;
case 1:
case 8: // Duotone=8;
dataParser = new DataParserGrayscale();
break;
case 3:
dataParser = new DataParserRgb();
break;
case 4:
dataParser = new DataParserCmyk();
break;
case 9:
dataParser = new DataParserLab();
break;
case COLOR_MODE_INDEXED: {
// case 2 : // Indexed=2;
final byte[] ColorModeData = getData(byteSource, PSD_SECTION_COLOR_MODE);
// ImageResourceBlock block = findImageResourceBlock(blocks,
// 0x03EB);
// if (block == null)
// throw new ImageReadException(
// "Missing: Indexed Color Image Resource Block");
dataParser = new DataParserIndexed(ColorModeData);
break;
}
case 7: // Multichannel=7;
// fDataParser = new DataParserStub();
// break;
// case 1 :
// fDataReader = new CompressedDataReader();
// break;
default:
throw new ImagingException("Unknown Mode: " + imageContents.header.mode);
}
final DataReader fDataReader;
switch (imageContents.compression) {
case 0:
fDataReader = new UncompressedDataReader(dataParser);
break;
case 1:
fDataReader = new CompressedDataReader(dataParser);
break;
default:
throw new ImagingException("Unknown Compression: " + imageContents.compression);
}
try (InputStream is = getInputStream(byteSource, PSD_SECTION_IMAGE_DATA)) {
fDataReader.readData(is, result, imageContents, this);
// is.
// ImageContents imageContents = readImageContents(is);
// return imageContents;
}
return result;
}