如何在没有 JFrame 的情况下在控制台上输入图形?
How to input graphics on a console without JFrame?
我使用 codiva 在 Chromebook 上进行编码。我只是想知道我是否可以在 控制台 输出中创建图形。例如,我现在的文本是纯文本和普通文本(它在控制台中以纯文本形式打印)。有没有办法加粗、强调,如果我只能使用控制台输出(没有canvas, Jframe, popup等)?
我试过“\u001B[1m(粗体)”,但我得到的只是(见输出)。斜体字也一样。
输出:
使用 java.awt.image.BufferedImage
BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
//.. draw stuff ..
ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();
writer.setOutput(ImageIO.createImageOutputStream(new File("myimage.png"));
writer.write(image);
这可能不适用于所有终端,因为它取决于终端。这是我的回答所依据的文档。 (DOC)
控制序列的解释是特定控制台的主题,codiva.io的控制台似乎不解释任何控制序列。
但是,由于它显示在浏览器中并且浏览器通常具有广泛的 Unicode 支持,因此您可以使用特殊代码点实现有限的格式设置。例如
class HelloCodiva {
public static void main(String[] args) {
System.out.println("Formatted: "
+ bold("bold") + " " + italic("italic") + " " + bold(italic("both")));
}
static CharSequence bold(CharSequence cs) {
return trans(cs, 0x1D400, 0x1D41A);
}
static CharSequence italic(CharSequence cs) {
return trans(cs, 0x1D434, 0x1D44e);
}
static CharSequence trans(CharSequence cs, int upper, int lower) {
return cs.codePoints()
.map(cp -> cp >= 'A' && cp <= 'Z'? cp + upper - 'A':
cp >= 'a' && cp <= 'z'? cp + lower - 'a':
cp >= 0x1D400 && cp <= 0x1D433? cp + 104:
cp >= 0x1D434 && cp <= 0x1D467? cp + 52:
cp)
.collect(StringBuilder::new,
StringBuilder::appendCodePoint, StringBuilder::append);
}
}
打印
Formatted:
在codiva.io的控制台中。
限制是它只适用于字母。但是对于突出重要的单词,这可能就足够了。
我使用 codiva 在 Chromebook 上进行编码。我只是想知道我是否可以在 控制台 输出中创建图形。例如,我现在的文本是纯文本和普通文本(它在控制台中以纯文本形式打印)。有没有办法加粗、强调,如果我只能使用控制台输出(没有canvas, Jframe, popup等)?
我试过“\u001B[1m(粗体)”,但我得到的只是(见输出)。斜体字也一样。
输出:
使用 java.awt.image.BufferedImage
BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
//.. draw stuff ..
ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();
writer.setOutput(ImageIO.createImageOutputStream(new File("myimage.png"));
writer.write(image);
这可能不适用于所有终端,因为它取决于终端。这是我的回答所依据的文档。 (DOC)
控制序列的解释是特定控制台的主题,codiva.io的控制台似乎不解释任何控制序列。
但是,由于它显示在浏览器中并且浏览器通常具有广泛的 Unicode 支持,因此您可以使用特殊代码点实现有限的格式设置。例如
class HelloCodiva {
public static void main(String[] args) {
System.out.println("Formatted: "
+ bold("bold") + " " + italic("italic") + " " + bold(italic("both")));
}
static CharSequence bold(CharSequence cs) {
return trans(cs, 0x1D400, 0x1D41A);
}
static CharSequence italic(CharSequence cs) {
return trans(cs, 0x1D434, 0x1D44e);
}
static CharSequence trans(CharSequence cs, int upper, int lower) {
return cs.codePoints()
.map(cp -> cp >= 'A' && cp <= 'Z'? cp + upper - 'A':
cp >= 'a' && cp <= 'z'? cp + lower - 'a':
cp >= 0x1D400 && cp <= 0x1D433? cp + 104:
cp >= 0x1D434 && cp <= 0x1D467? cp + 52:
cp)
.collect(StringBuilder::new,
StringBuilder::appendCodePoint, StringBuilder::append);
}
}
打印
Formatted:
在codiva.io的控制台中。
限制是它只适用于字母。但是对于突出重要的单词,这可能就足够了。