本文整理汇总了C#中Octree.GetItem方法的典型用法代码示例。如果您正苦于以下问题:C# Octree.GetItem方法的具体用法?C# Octree.GetItem怎么用?C# Octree.GetItem使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Octree
的用法示例。
在下文中一共展示了Octree.GetItem方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Quantazase
private static Bitmap Quantazase(Bitmap bitmap)
{
if (bitmap.PixelFormat == PixelFormat.Format8bppIndexed)
return bitmap;
Bitmap result = new Bitmap(bitmap.Width, bitmap.Height, PixelFormat.Format8bppIndexed);
Bitmap trueColorBitmap;
if (bitmap is Bitmap && bitmap.PixelFormat == PixelFormat.Format32bppArgb)
{
trueColorBitmap = bitmap;
}
else
{
trueColorBitmap = new Bitmap(bitmap.Width, bitmap.Height, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(trueColorBitmap))
{
g.PageUnit = GraphicsUnit.Pixel;
g.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height);
}
}
Octree<List<Color>> colors = new Octree<List<Color>>(5, 5);
BitmapData bmpData = trueColorBitmap.LockBits(new Rectangle(new Point(), trueColorBitmap.Size), ImageLockMode.ReadOnly, trueColorBitmap.PixelFormat);
int* pointer = (int*)bmpData.Scan0.ToPointer();
for (int y = 0; y < bitmap.Height; y++)
{
for (int x = 0; x < trueColorBitmap.Width; x++)
{
Color color = Color.FromArgb(pointer[x]);
int[] position = new int[5];
for (int i = 0; i < position.Length; i++)
{
position[i] = ((color.R >> (8 - i)) & 1);
position[i] += ((color.G >> (8 - i)) & 1) * 2;
position[i] += ((color.B >> (8 - i)) & 1) * 4;
}
colors.GetItem(position).Add(color);
}
pointer += bmpData.Stride;
}
if (trueColorBitmap != bitmap)
trueColorBitmap.Dispose();
return result;
}