【发布时间】:2010-11-07 21:12:15
【问题描述】:
我正在将具有 alpha 透明度的图像中的颜色动态映射到另一组(较小的)颜色。
我有这样的代码:
var mappings = new List<ColorMap>();
foreach(var color in mapcolours)
{
// Add mappings for all alpha values of the mask colour
for(int i = 0; i < 256; i++)
{
var cm = new ColorMap();
cm.OldColor = Color.FromArgb(i, mapcolour);
cm.NewColor = Color.FromArgb(i, GetDestinationColour(mapcolour));
mappings.Add(cm);
}
}
var ia = new ImageAttributes();
ia.SetRemapTable(mappings.ToArray(), ColorAdjustType.Bitmap);
g.DrawImage(image_mask, destrect, 0, 0, image_mask.Width, image_mask.Height, GraphicsUnit.Pixel, ia);
但不幸的是(我认为这是因为我正在映射每种颜色的所有 255 个 alpha 值)这会占用大量 CPU,而这些 CPU 在某些分析过程中会出现。
有没有更有效的方法来做到这一点?我无法停止映射所有 255 个 alpha 值,否则结果看起来很糟糕。
【问题讨论】: