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; } } }
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; }