带有透明度

时间:2017-04-26 08:06:55

标签: java transparency drawimage

这是我的问题: 我想基于具有透明度的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绘制图像的问题是什么? 你能帮我找到解决这个问题的方法,尊重我的记忆限制吗?...

0 个答案:

没有答案