相关疑难解决方法(0)

图像到ASCII艺术转换

序幕

这个主题不时出现在SO上,但通常是因为写得不好的问题而被删除.我看到很多这样的问题,然后在请求附加信息时从OP(通常的低代表)中沉默.如果输入对我来说足够好,我决定回答一个问题,它通常会在活动时每天获得一些投票,但几周之后问题就会被删除/删除,并且所有问题都从一开始就开始.所以我决定写这个Q&A所以我可以直接引用这些问题,而不会一遍又一遍地重写答案......

另一个原因也是这个META线程针对我,所以如果你有额外的输入随意评论.

如何使用C++将位图图像转换为ASCII艺术

一些限制:

  • 灰度图像
  • 使用单倍间距字体
  • 保持简单(不要为初级程序员使用太高级的东西)

这是一个相关的Wiki页面ASCII艺术(感谢@RogerRowland)

c++ 2d bitmap image-processing ascii-art

98
推荐指数
1
解决办法
2万
查看次数

现代 PC 视频硬件是否支持硬件中的 VGA 文本模式,或者 BIOS 是否模拟它(使用系统管理模式)?

当您将一个字节(例如(0x31)存储到物理线性地址的VGA 文本(模式 03)帧缓冲区中时),在以 16 位传统 BIOS MBR 模式启动的现代 PC 硬件上究竟发生了什么? 将该地区MTRR设置为 UC商店有多慢在一台 Kaby Lake iGPU 笔记本电脑上的实验测试表明,WC 上的 clflushopt 与 VGA 内存的 UC 速度大致相同。但没有 clflushopt,存储到 WC 内存永远不会离开 CPU 并且根本不更新屏幕,运行速度超快.)'1'B8000mov [es:di], eaxmov

如果它不是每个商店的 SMI,是否有任何方法可以在用户空间中的一块 WB 内存上估算此成本,以进行性能实验而无需实际重新启动到实模式?(例如,使用 BSS 页面作为实际上并不在任何地方显示的假装帧缓冲区)。

相应的字体字形在下一次刷新时出现在屏幕上,但硬件扫描是否真的从 VRAM(或 iGPU 的 DRAM)读取该 ASCII 字符并动态映射到位图字体字形?或者每个存储或每个 vblank 都有一些软件拦截,所以真正的硬件只需要处理位图帧缓冲区?


众所周知,传统 BIOS 引导使用系统管理模式 (SMM)将 USB kbd/鼠标模拟为 PS/2 设备。我想知道它是否也用于 VGA 文本模式帧缓冲区。我认为它用于VGA的I …

performance assembly bios vga x86-16

13
推荐指数
2
解决办法
1199
查看次数

程序集 8086 中的图形模式

我有一个被调用的变量,average在我的 中DATASEG,它每次都会改变,因为用户每次输入不同的输入。我想要做的是转到图形模式(VGA),然后在那里打印您的平​​均值是:然后平均值我知道如何更改为这样的图形模式:

mov ax, 13h  
int 10h
Run Code Online (Sandbox Code Playgroud)

打印平均值后,如果平均值高于 75,我想打印在下面你是个好学生,继续努力,如果不是。别担心,你会好起来的!提前致谢。

graphics assembly vga emu8086

9
推荐指数
1
解决办法
9589
查看次数

Ray Casting具有不同的高度尺寸

我有一个java项目谁制作了"windows'迷宫"并使用光线投射算法.这是一个截图:

迷宫用射线铸造

就像你可以看到所有的墙都有相同的高度.我想做同样的事,但身高不同

private void castRay(int xOnScreen,double angle,double direction) {
    R rx = castRayInX(angle,direction);
    R ry = castRayInY(angle,direction);
    // In case of out-of-space rays
    if (rx.getDistance()==Double.MAX_VALUE && ry.getDistance()==Double.MAX_VALUE) {
        graphics.setColor(BACKGROUND);
        graphics.drawLine(xOnScreen,0,xOnScreen,this.image.getHeight());
        return;
    }
    double distance = rx.getDistance();
    double normal = rx.getNormal();
    Color c = rx.getColor();
    double coef = Math.cos((angle+direction+Math.PI)-normal);
    Plot collision = rx.getPlot();

    if (ry.getDistance()<rx.getDistance()) {
        distance = ry.getDistance();
        normal = ry.getNormal();
        c = ry.getColor();
        coef = Math.cos((angle+direction+Math.PI)-normal);
        collision = ry.getPlot();
    }

    coef = Math.abs(coef);
    int factor = map.length*SQUARE_SIZE;
    double d …
Run Code Online (Sandbox Code Playgroud)

java math graphics 2d-3d-conversion raycasting

6
推荐指数
1
解决办法
2422
查看次数

在屏幕上移动对象的最佳方法是什么?

我想知道在屏幕上移动对象的最佳方法是什么,例如:如果某种形状出现在屏幕上(在图形模式下),我想使用键盘的箭头键左右移动它。我知道如何读取键盘缓冲区。重要的是我想知道如何在屏幕上平滑移动内容。

我正在使用具有8086体系结构的DOS-Box。并且移动必须处于图形模式(320X200)。

keyboard graphics assembly dosbox x86-16

3
推荐指数
1
解决办法
3228
查看次数

如何在不使用任何框架或库的情况下在屏幕上绘制图形?

我想手动绘制图形,这意味着没有使用任何库或框架工作,如QT,directX,whindow.h ....就像命令屏幕上的每个像素在不同的时间显示一些特定的颜色.每个人都根据这些库或其他任何内容提供教程.我想要的是制作我自己的GUI.据我所知,这将是非常复杂,难以学习和理解,混乱和耗费大量时间,但我已经准备好了.我需要一些资源来理解这一点.

是的,我知道C++所以如果我不得不使用这种语言会更好,但如果需要我会学习其他语言,只是我想知道我应该学习哪种语言.

c++ graphics

2
推荐指数
1
解决办法
2505
查看次数