太阳不下山 发表于 2021-7-30 19:12:23

BitmapToASCii

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PicToASCii
{
    public static class ASCiiHelper
    {
      public static string Generate(Bitmap bitmap, int rowSize, int colSize, int type)
      {
            StringBuilder result = new StringBuilder();
            char[] charset = { ' ', '.', ',', ':', ';', 'i', '1', 'r', 's', '5', '3', 'A', 'H', '9', '8', '&', '@', '#' };
            if (type == 1)
            {
                //charset = new char[] { '8', '9', '6', '4', '3', '5', '7', '0', '2', '1', '.',' ' };
                charset = new char[] { ' ', '.', '1', '2', '0', '7', '5', '3', '4', '6', '9', '8' };
            }
            else if (type == 2)
            {
                charset = new char[] { '丶', '卜', '乙', '日', '瓦', '車', '馬', '龠', '齱', '龖' };
            }
            int bitmapH = bitmap.Height;
            int bitmapW = bitmap.Width;
            for (int h = 0; h < bitmapH / rowSize; h++)
            {
                int offsetY = h * rowSize;
                for (int w = 0; w < bitmapW / colSize; w++)
                {
                  int offsetX = w * colSize;
                  float averBright = 0;
                  for (int j = 0; j < rowSize; j++)
                  {
                        for (int i = 0; i < colSize; i++)
                        {
                            try
                            {
                              Color color = bitmap.GetPixel(offsetX + i, offsetY + j);
                              averBright += color.GetBrightness();
                            }
                            catch (ArgumentOutOfRangeException)
                            {
                              averBright += 0;
                            }
                        }
                  }
                  averBright /= (rowSize * colSize);
                  int index = (int)(averBright * charset.Length);
                  if (index == charset.Length)
                        index--;
                  result.Append(charset);
                }
                result.Append("\r\n");
            }
            return result.ToString();
      }
    }
}



文档来源:51CTO技术博客https://blog.51cto.com/u_15316096/3209766
页: [1]
查看完整版本: BitmapToASCii