public IAsciiImage GetAsciiArt(Image image, Font font, AsciiPalette palette, Size pixelBlockSize) { Args.IsNotNull(image, "image"); Args.IsNotNull(font, "font"); Args.IsNotNull(palette, "palette"); var imageAsBitmap = new Bitmap(image); var asciiImageSize = GetAsciiImageSize(imageAsBitmap.Size, pixelBlockSize); var asciiImage = new char[asciiImageSize.Height, asciiImageSize.Width]; for (int i = 0; i < asciiImageSize.Width; i++) { for (int j = 0; j < asciiImageSize.Height; j++) { var currentBlockStartX = j * pixelBlockSize.Width; var currentBlockStartY = i * pixelBlockSize.Height; var currentBlockEndX = 0; var currentBlockEndY = 0; if (imageAsBitmap.Width - currentBlockStartX >= pixelBlockSize.Width) { currentBlockEndX = currentBlockStartX + pixelBlockSize.Width; } else { currentBlockEndX = imageAsBitmap.Width - currentBlockStartX; } if (imageAsBitmap.Height - currentBlockStartY >= pixelBlockSize.Height) { currentBlockEndY = currentBlockStartY + pixelBlockSize.Height; } else { currentBlockEndY = imageAsBitmap.Height - currentBlockStartY; } var brightnessSum = 0; for (int x = currentBlockStartX; x < currentBlockEndX; x++) { for (int y = currentBlockStartY; y < currentBlockEndY; y++) { brightnessSum += GetBrightness(imageAsBitmap.GetPixel(x, y)); } } var averageBrightness = (byte)(brightnessSum / ((currentBlockEndX - currentBlockStartX) * ((currentBlockEndY - currentBlockStartY)))); asciiImage[j, i] = palette.GetSymbolByBrightness(averageBrightness); } } return(new AsciiImage(asciiImage, font)); }
public IAsciiImage GetAsciiArt(Image image, Font font, AsciiPalette palette) { return(GetAsciiArt(image, font, palette, DefaultBlockSize)); }