private void DrawOnCanvas(FDBitmap imageData, int posX, int posY, byte rotation = 0) { if (imageData == null) { return; } int canvasX = (posX + 2) * unitWidth - 1; int canvasY = (posY + 2) * unitHeight - 1; for (int i = imageData.Width - 1; i >= 0; i--) { for (int j = imageData.Height - 1; j >= 0; j--) { int targetX = canvasX + i + 1 - imageData.Width; int targetY = canvasY + j + 1 - imageData.Height; if (targetX < 0 || targetY < 0 || targetX >= canvasWidth || targetY >= canvasHeight) { continue; } int targetIndex = (targetY * canvasWidth + targetX) << 2; Color clr = imageData.GetPixelColor(i, j, rotation); // For transparent color, just skip if (clr.A == 0 && clr.R == 0 && clr.G == 255 && clr.B == 255) { continue; } if (clr.A != 0 && clr.A != 255) { canvasData[targetIndex] = (byte)((canvasData[targetIndex] + clr.R) / 2); canvasData[targetIndex + 1] = (byte)((canvasData[targetIndex] + clr.G) / 2); canvasData[targetIndex + 2] = (byte)((canvasData[targetIndex] + clr.B) / 2); canvasData[targetIndex + 3] = 255; } else { canvasData[targetIndex] = clr.R; canvasData[targetIndex + 1] = clr.G; canvasData[targetIndex + 2] = clr.B; canvasData[targetIndex + 3] = clr.A; } } } }
public ImageDataExporter(FDBitmap data) { this.bitmapData = data; }