using System.Drawing.Imaging;
using System.Runtime.InteropServices;
public static void Main(string[] args) {
string imagePath = "IMG_3021.png";
string ascii_art = LoadPixel(imagePath);
System.Console.WriteLine(ascii_art);
public const string PIXEL_ASCII_MAP = "`^\",:;Il!i~+_-?][}{1)(|\\/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$";
public static string LoadPixel(string fileName) { return LoadPixel(new Bitmap(fileName)); }
public static string LoadPixel(Image image) { return LoadPixel(new Bitmap(image)); }
public static string LoadPixel(Bitmap im) {
BitmapData data = im.LockBits(
new Rectangle(Point.Empty, im.Size),
ImageLockMode.ReadWrite, im.PixelFormat
bool hasAlpha = data.PixelFormat == PixelFormat.Format32bppArgb;
int pixelSize = hasAlpha ? 4 : 3;
int padding = data.Stride - (data.Width * pixelSize);
byte[] bytes = new byte[data.Height * data.Stride];
Marshal.Copy(data.Scan0, bytes, 0, bytes.Length);
byte alpha, red, green, blue;
StringBuilder sb = new StringBuilder();
for (int y = 0; y < data.Height; ++y) {
for (int x = 0; x < data.Width; ++x) {
alpha = hasAlpha ? (byte)255 : bytes[index + 3];
green = bytes[index + 1];
sum = (red + green + blue) / 3;
sum = sum % PIXEL_ASCII_MAP.Length;
ascii_val = PIXEL_ASCII_MAP[sum];