首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言控制台繪製愛心:位圖轉字符畫完整實現

     編輯:程式設計疑難解答

核心思路

將愛心圖片(位圖)讀入內存,按亮度映射為字符集 " .:-=+*#%@"(由淺到深),逐行輸出到控制台。

完整代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define WIDTH  80
#define HEIGHT 40
const char *RAMP = " .:-=+*#%@";

unsigned char *load_bmp(const char *path, int *w, int *h) {
    FILE *fp = fopen(path, "rb");
    if (!fp) return NULL;
    fseek(fp, 18, SEEK_SET);
    fread(w, 4, 1, fp);
    fread(h, 4, 1, fp);
    fseek(fp, 54, SEEK_SET);
    int row = ((*w * 3 + 3) / 4) * 4;
    unsigned char *data = malloc(row * *h);
    fread(data, row, *h, fp);
    fclose(fp);
    return data; // BGR 格式,底部在前
}

int main() {
    int w, h;
    unsigned char *img = load_bmp("heart.bmp", &w, &h);
    if (!img) { puts("圖片讀取失敗"); return 1; }

    int row = ((w * 3 + 3) / 4) * 4;
    for (int y = h - 1; y >= 0; y--) { // BMP 底部在前,需倒序
        for (int x = 0; x < w; x++) {
            unsigned char *p = img + y * row + x * 3;
            int gray = (p[0] + p[1] + p[2]) / 3; // 簡單灰度
            int idx = gray * (strlen(RAMP) - 1) / 255;
            putchar(RAMP[idx]);
        }
        putchar('\n');
    }
    free(img);
    return 0;
}

關鍵步驟

  1. 準備 單色愛心 BMP(白底黑心或透明背景),尺寸建議 80×40
  2. 讀取 BMP 文件頭獲取寬高,跳過 54 字節頭部讀取像素數據
  3. BMP 行填充 4 字節對齊,計算 row_stride
  4. 灰度化 → 映射字符索引 → 輸出
  5. 編譯:gcc heart.c -o heart && ./heart

Windows 下運行

  • 安裝 MinGW-w64 或使用 VS Code + C/C++ 擴展
  • 將 heart.bmp 放在可執行文件同級目錄
  • CMD 執行 heart.exe

總結

字符畫本質是「圖片灰度映射」。掌握 BMP 讀取、行填充、灰度映射三步,即可將任意圖片轉為控制台藝術。愛心圖片可用畫圖工具繪製或網上下載,命名為 heart.bmp 放在項目根目錄即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved