示例#1
0
        private void DrawImage(LGraphics pixel, int x, int y, int w, int h,
                int offsetX, int offsetY)
        {
            if (isClose)
            {
                return;
            }
            pixel.UpdatePixels();

            x += translateX;
            y += translateY;

            Color[] currentPixels = pixel.pixels;
            uint transparent = pixel.transparent;
            if (x < 0)
            {
                w += x;
                offsetX -= x;
                x = 0;
            }
            if (y < 0)
            {
                h += y;
                offsetY -= y;
                y = 0;
            }
            if (x + w > width)
            {
                w = width - x;
            }
            if (y + h > height)
            {
                h = height - y;
            }
            if (w < 0 || h < 0)
            {
                return;
            }
            if (transparent < 0)
            {
                for (int size = 0; size < h; size++)
                {
                    Array.Copy(currentPixels, (offsetY + size) * pixel.width
                            + offsetX, pixels, (y + size) * width + x, w);
                }
            }
            else
            {
                int findIndex = y * width + x;
                int drawIndex = offsetY * pixel.width + offsetX;
                int moveFind = width - w;
                int moveDraw = pixel.width - w;
                for (int i = 0; i < h; i++)
                {
                    for (int j = 0; j < w; )
                    {
                        if (Inside(j, i))
                        {
                            continue;
                        }
                        if (currentPixels[drawIndex].PackedValue != transparent)
                        {
                            DrawPoint(pixels, findIndex,
                                    currentPixels[drawIndex].PackedValue);
                        }
                        j++;
                        findIndex++;
                        drawIndex++;
                    }
                    findIndex += moveFind;
                    drawIndex += moveDraw;
                }
            }
        }
示例#2
0
 public void Interleave(LGraphics pix, int[][] mask)
 {
     pix.UpdatePixels();
     Color[] processedPixels = new Color[size];
     int m = mask.Length, n = mask[0].Length;
     int i = 0, j = 0;
     for (int y = 0; y < height; ++y)
     {
         int yOffset = y * width;
         for (int x = 0; x < width; ++x)
         {
             int offset = x + yOffset;
             processedPixels[offset] = (mask[i][j] == 1) ? pixels[offset]
                     : pix.pixels[offset];
             if (++j >= n)
             {
                 j = 0;
             }
         }
         if (++i >= m)
         {
             i = 0;
         }
     }
     this.pixels = processedPixels;
     this.isDitry = true;
 }