这是我的问题: 我想基于具有透明度的IndexColorModel在BufferedImage上应用转换(translate + rotate + clip)(索引0是我的透明像素,索引1是黑色,索引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绘制图像的问题是什么? 你能帮我找到解决这个问题的方法,尊重我的记忆限制吗?...