c++控制台如何用几种近似色来代替RGB的所有颜色

这个人中暑了 2017-11-15 09:09:25
加精
我在做一个控制台程序
可以通过读取一个bmp图片的位图数据
读取每一个像素的RGB值.用空格代替
将其打印输出在控制台程序上
现在我已经能打印图形了,但是颜色不对
所以我想问
我已知一个像素的RGB值,如何用控制台允许的几种字体背景色来近似的代替?
有什么计算方法吗?
下面是我打印的图片和控制台允许的几种字体背景色

...全文
7863 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
studentlink 2017-12-29
  • 打赏
  • 举报
回复
学习一下、、、、、
这个人中暑了 2017-12-17
  • 打赏
  • 举报
回复

raven3005 2017-12-11
  • 打赏
  • 举报
回复
学习一下~~~~~
VV20102012 2017-12-10
  • 打赏
  • 举报
回复
这个效果很好
这个人中暑了 2017-12-08
  • 打赏
  • 举报
回复
非常感谢十八楼的回复 我当初居然忽略了这个答案 我按照这个思路,先自定义一个Colorl类, 里面有属性R,G,B代表三个分量,WORD类Value代表颜色的值, 先将系统已有的十六钟颜色对应创建一个对象,储存在一个数组里,然后遍历数组,找出相差最小的那个颜色
jobzhaixl 2017-12-07
  • 打赏
  • 举报
回复
学习中,学习中
这个人中暑了 2017-12-04
  • 打赏
  • 举报
回复
因为从周五开始一直在忙,所以没有及时回复,不好意思
这个人中暑了 2017-12-04
  • 打赏
  • 举报
回复
..统一回复一下各位大神.. 我也知道这样显示图片会失真,也可以用灰度显示,可以直接显示图片 但老师的要求就是这样啊..大作业要求, 所以希望大家能给我一点有用的建议
schlafenhamster 2017-12-02
  • 打赏
  • 举报
回复
赵4老师不是给了 例子吗? vc6 上 没有 GetConsoleWindow(); int main( ) { HMODULE hKernel32=GetModuleHandle("kernel32"); GetConsoleWindow=(PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow"); HWND hwnd=GetConsoleWindow(); //////////////////// 有了 hwnd 再 取 HDC hdc=GetDC(hwnd); 什么 都可以了 !
jsxyhelu2015 2017-12-02
  • 打赏
  • 举报
回复
我建议首先转换到hsv区域里面。有你需要操作的原始图吗?能发上来看看吗?
赛蜗牛 2017-12-02
  • 打赏
  • 举报
回复
我是来帮顶的, 淘宝内部优惠券
schlafenhamster 2017-11-30
  • 打赏
  • 举报
回复
是啊,为什么 局限于 16色 ?
赵4老师 2017-11-30
  • 打赏
  • 举报
回复
控制台中完全可以直接显示RGB位图呀:
#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
HWND WINAPI GetConsoleWindow();
void HideTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = FALSE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
void ShowTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = TRUE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
int main() {
    HWND  hwnd;
    HDC   hdc;
    HFONT hfont;
    HBITMAP hbm;
    HDC hdcBits;
    BITMAP bm;

    system("color F0");
    system("cls");
    HideTheCursor();
    hwnd  = GetConsoleWindow();
    hdc   = GetDC(hwnd);
    hbm=LoadImage(0,"C:\\Windows\\Soap Bubbles.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
    if (hbm) {
        hdcBits = CreateCompatibleDC(hdc);
        GetObject (hbm, sizeof(BITMAP), &bm);
        SelectObject(hdcBits,hbm);
        BitBlt(hdc,200,10,bm.bmWidth, bm.bmHeight,hdcBits,0,0,SRCCOPY);
        DeleteDC(hdcBits);
        DeleteObject(hbm);
    }
    hfont = CreateFont(24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");
    SelectObject(hdc,hfont);
    SetTextColor(hdc,RGB(255,255,255));
    SetBkMode(hdc,TRANSPARENT);
    TextOut(hdc,210,30,"这个背景是泡泡",14);
    DeleteObject(hfont);
    ReleaseDC(hwnd,hdc);
    getch();
    system("color 07");
    system("cls");
    ShowTheCursor();
    return 0;
}
paschen 2017-11-30
  • 打赏
  • 举报
回复
控件台能表示的也就16种颜色,你可以判断各颜色分量,通过判断是否大于中间值来选择是否使用INTENSITY属性,如果你是把一个真彩色的图转换到控制台显示,可能会失真很多
moonfym 2017-11-29
  • 打赏
  • 举报
回复
不错,学习一下。
阿源是少年 2017-11-29
  • 打赏
  • 举报
回复
或者用灰度0-255对应到“标准”的ASCII字符 "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. "
阿源是少年 2017-11-29
  • 打赏
  • 举报
回复
RGB转灰度公式 http://blog.csdn.net/xdrt81y/article/details/8289963
阿源是少年 2017-11-29
  • 打赏
  • 举报
回复
引用 30 楼 zhao4zhong1 的回复:
为什么不利用 ░▒▓█ 这几个字符实现中间色呢?
配合RGB转灰度图会比较靠谱,控制台的颜色太有限,差值大,很难映射到RGB
天台的故事 2017-11-29
  • 打赏
  • 举报
回复
C++控制台界面编程(V4) 中文 PDF 高清版 里面有控制台所有颜色的瓷砖图片。
sickchick 2017-11-28
  • 打赏
  • 举报
回复
不懂,初学C++,帮顶
加载更多回复(28)

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧