本文整理汇总了C#中System.Collections.BitArray.SetAll方法的典型用法代码示例。如果您正苦于以下问题:C# System.Collections.BitArray.SetAll方法的具体用法?C# System.Collections.BitArray.SetAll怎么用?C# System.Collections.BitArray.SetAll使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Collections.BitArray
的用法示例。
在下文中一共展示了System.Collections.BitArray.SetAll方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CollisionMask
public System.Collections.BitArray CollisionMask(int framenum)
{
EnsureUndisposed();
if (framenum >= frames.Count)
return null;
if (!separatemasks)
framenum = 0;
BoundingBox bb = GetBoundingBox(framenum);
if (bb.Left > bb.Right || bb.Top > bb.Bottom)
return null;
bb.Normalize();
int w = bb.Right - bb.Left + 1;
int h = bb.Bottom - bb.Top + 1;
System.Collections.BitArray mask = new System.Collections.BitArray(w * h);
switch (bbshape)
{
case BoundingBoxShape.Rectangle:
// The mask is a rectangle.
mask.SetAll(true);
break;
case BoundingBoxShape.Diamond:
case BoundingBoxShape.Disk:
// Use a lambda function for the shape: a disk or a diamond.
Func<double, double, bool> ftn =
bbshape == BoundingBoxShape.Disk ?
(Func<double, double, bool>)((double x, double y) => (x * x + y * y < 1.0)) :
(Func<double, double, bool>)((double x, double y) => (Math.Abs(x) + Math.Abs(y) < 1.0));
// Fill in the mask fitting the coordinates into the lambda function for the shape.
//GM8 BETA1/2/RC1 incorrect version (off-by-one and excessive rounding):
//int scalex = (bb.Right - bb.Left) >> 1;
//int scaley = (bb.Bottom - bb.Top) >> 1;
//for (int j = 0; j < h; j++)
// for (int i = 0; i < w; i++)
// mask[j * w + i] = ftn((double)(i - scalex) / (double)scalex, (double)(j - scaley) / (double)scaley);
// correct code:
double scalex = (double)(bb.Right - bb.Left + 1) * 0.5;
double scaley = (double)(bb.Bottom - bb.Top + 1) * 0.5;
for (int j = 0; j < h; j++)
for (int i = 0; i < w; i++)
mask[j * w + i] = ftn((double)(i - scalex) / scalex, (double)(j - scaley) / scaley);
break;
default:
// Generate a mask based on alpha tolerance on each pixel.
Bitmap b = frames[framenum];
BitmapData bd = b.LockBits(new Rectangle(bb.Left, bb.Top, w, h), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
for (int j = 0; j < h; j++)
for (int i = 0; i < w; i++)
mask[j * w + i] = (int)((uint)System.Runtime.InteropServices.Marshal.ReadInt32(bd.Scan0, (j + bb.Top) * bd.Stride + (i + bb.Left) * 4) >> 24) > tol;
b.UnlockBits(bd);
break;
}
return mask;
}