当前位置: 首页>>代码示例>>C#>>正文


C# System.Collections.BitArray.SetAll方法代码示例

本文整理汇总了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;
 }
开发者ID:MilesBoulanger,项目名称:game-creator,代码行数:54,代码来源:FrameBasedAnimation.cs


注:本文中的System.Collections.BitArray.SetAll方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。