DrawImage с IndexColorModel с прозрачностью
Вот моя проблема: я хотел бы применить преобразования (translate + rotate + clip) к BufferedImage на основе IndexColorModel с прозрачностью ( index 0 - мой прозрачный пиксель, index 1 - черный, index 2 - белый, и так далее…)
Исходное изображение (т.е. до преобразований) создается как это, а затем оценивается путем считывания данных из файла:
// Color Model
IndexColorModel cm;
cm = new IndexColorModel(7, length, colors[0], colors[1], colors[2], 0);
// Source image.
BufferedImage source;
source = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_INDEXED, cm);
Затем новое изображение создается так:
AffineTransform tr = new AffineTransform();
// Valuating AffineTransform […]
IndexColorModel cm2 = (IndexColorModel ) source.getColorModel();
BufferedImage result = new BufferedImage( newWidth, newHeight, BufferedImage.TYPE_BYTE_INDEXED, cm2);
Graphics2D graphics = (Graphics2D) result.getGraphics();
Polygon polygon = new Polygon (xList, yList, points.length) ;
graphics.setClip(polygon);
graphics.drawImage(source, tr, null);
Преобразования результата BufferedImage в порядке, но есть проблема с цветами: прозрачные пиксели прозрачны (хорошо), но черные пиксели теперь тоже прозрачны. Так как мой IndexColorMap был плохо прочитан. Используя TYPE_INT_ARGB, кажется, что все в порядке, но для меня это невозможно, потому что изображения очень большие (ограничение памяти).
Я сделал еще один тест с AffineTransformOp следующим образом:
AffineTransformOp op = new AffineTransform(tr, AffineTransformOp.TYPE_NEAREST_NEIGBOR);
op.filter(source, result);
Дисплей в порядке (черный - черный;)), но я не знаю, как применить операцию отсечения. Тем не менее, это заставляет меня думать, что IndexColorModel в порядке.
Что я делаю не так?... В чем проблема с рисованием изображения с помощью IndexColorModel с прозрачностью? Не могли бы вы помочь мне найти решение этой проблемы, учитывая мои ограничения памяти?...