本文整理汇总了C#中Palette.FindClosestColorID方法的典型用法代码示例。如果您正苦于以下问题:C# Palette.FindClosestColorID方法的具体用法?C# Palette.FindClosestColorID怎么用?C# Palette.FindClosestColorID使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Palette
的用法示例。
在下文中一共展示了Palette.FindClosestColorID方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ConvertTexture
public static ConvertedTexture ConvertTexture(string name, string texname, string palname, Bitmap bmp)
{
int dswidth = 0, dsheight = 0, widthPowerOfTwo = 8, heightPowerOfTwo = 8;
GetDSWidthAndHeight(bmp.Width, bmp.Height, out dswidth, out dsheight, out widthPowerOfTwo, out heightPowerOfTwo);
// cheap resizing for textures whose dimensions aren't power-of-two
if ((widthPowerOfTwo != bmp.Width) || (heightPowerOfTwo != bmp.Height))
{
Bitmap newbmp = new Bitmap(widthPowerOfTwo, heightPowerOfTwo);
Graphics g = Graphics.FromImage(newbmp);
g.DrawImage(bmp, new Rectangle(0, 0, widthPowerOfTwo, heightPowerOfTwo));
bmp = newbmp;
}
bool alpha = false;
for (int y = 0; y < heightPowerOfTwo; y++)
{
for (int x = 0; x < widthPowerOfTwo; x++)
{
int a = bmp.GetPixel(x, y).A;
if (a >= 8 && a <= 248)
{
alpha = true;
break;
}
}
}
int textype = 0;
byte[] tex = null;
byte[] pal = null;
if (alpha)
{
// a5i3/a3i5
tex = new byte[widthPowerOfTwo * heightPowerOfTwo];
Palette _pal = new Palette(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height), 32);
int alphamask = 0;
if (_pal.m_Palette.Count <= 8)
{
textype = 6;
alphamask = 0xF8;
}
else
{
textype = 1;
alphamask = 0xE0;
}
for (int y = 0; y < heightPowerOfTwo; y++)
{
for (int x = 0; x < widthPowerOfTwo; x++)
{
Color c = bmp.GetPixel(x, y);
ushort bgr15 = Helper.ColorToBGR15(c);
int a = c.A & alphamask;
byte val = (byte)(_pal.FindClosestColorID(bgr15) | a);
tex[(y * widthPowerOfTwo) + x] = val;
}
}
pal = new byte[_pal.m_Palette.Count * 2];
for (int i = 0; i < _pal.m_Palette.Count; i++)
{
pal[i * 2] = (byte)(_pal.m_Palette[i] & 0xFF);
pal[(i * 2) + 1] = (byte)(_pal.m_Palette[i] >> 8);
}
}
else
{
// type5 - compressed
textype = 5;
tex = new byte[((widthPowerOfTwo * heightPowerOfTwo) / 16) * 6];
List<Palette> pallist = new List<Palette>();
List<ushort> paldata = new List<ushort>();
int texoffset = 0;
int palidxoffset = ((widthPowerOfTwo * heightPowerOfTwo) / 16) * 4;
for (int y = 0; y < heightPowerOfTwo; y += 4)
{
for (int x = 0; x < widthPowerOfTwo; x += 4)
{
bool transp = false;
for (int y2 = 0; y2 < 4; y2++)
{
for (int x2 = 0; x2 < 4; x2++)
{
Color c = bmp.GetPixel(x + x2, y + y2);
if (c.A < 8)
transp = true;
}
}
Palette txpal = new Palette(bmp, new Rectangle(x, y, 4, 4), transp ? 3 : 4);
uint texel = 0;
//.........这里部分代码省略.........