在我的UWP应用中,我们有用户上传的图像,它们几乎可以是任何大小-因此,当我将它们加载到Image控件中时,我会按比例调整它们的大小,以便它们最适合我们的图像容器(固定为112w) x 152h),但由于某些图像比我想要的宽,所以找到了图像的背景色,因此我可以设置图像的背景。
为此,我正在使用NuGet ColorThief package,下面的代码(取自我在那儿找到的示例)在很多情况下返回了错误的主色:
var ct = new ColorThief();
QuantizedColor qc = await ct.GetColor(decoder); //BitmapDecoder containing image
Windows.UI.Color c = Windows.UI.Color.FromArgb(qc.Color.A, qc.Color.R, qc.Color.G, qc.Color.B);
setImageBackgroundColor(bgColour);
我尝试过的一个图像就是这个图像-现在主要颜色显然应该是黑色,但返回的是中等灰色...。所以我的代码或图像有问题吗?还是我需要其他东西?去做?我只是觉得它不可靠,但我知道其他人可以毫无问题地使用它。
答案 0 :(得分:0)
根据该库的source code,看来它实际上是对图片调色板中的颜色求平均
public async Task<QuantizedColor> GetColor(BitmapDecoder sourceImage, int quality = DefaultQuality,
bool ignoreWhite = DefaultIgnoreWhite)
{
var palette = await GetPalette(sourceImage, 3, quality, ignoreWhite);
var dominantColor = new QuantizedColor(new Color
{
A = Convert.ToByte(palette.Average(a => a.Color.A)),
R = Convert.ToByte(palette.Average(a => a.Color.R)),
G = Convert.ToByte(palette.Average(a => a.Color.G)),
B = Convert.ToByte(palette.Average(a => a.Color.B))
}, Convert.ToInt32(palette.Average(a => a.Population)));
return dominantColor;
}
在这种情况下,我认为将ignoreWhite
设置为true
可能会返回实际的黑色,尽管看起来true
确实是默认设置。
我建议使用该库提供的其他public
方法:GetPalette
,以查看该图像的实际调色板是什么。这应该可以解释为什么要得到这种特殊颜色。
var palette = await GetPalette(decoder);
答案 1 :(得分:0)
我认为您需要将质量设置为5到10,并对调色板中的第一种颜色使用GetPalette方法。
index.html