我想将一个字符映射到图像层的0/1值。例如,转换字母" A"到0/1的矩阵,当它被打印时,它显示一个" A"。我想出了以下内容:
library(raster)
library(png)
# write character to temp png file and read back in as matrix
letter_to_matrix <- function(chr="", size=10)
{
tf <- tempfile(fileext = ".png")
png(tf, width = size, height=size) # save as temp png file
par(mar=c(0,0,0,0))
plot(0:1,0:1, type="n", frame=F, xaxt="n", yaxt="n", xlab="", ylab="")
text(.5,.5, chr, cex=1)
dev.off()
p <- png::readPNG(tf) # read in png file as array
apply(p, 1:2, mean) # average over layers
}
size = 10
m <- letter_to_matrix("a", size)
r <- raster::raster(nrows=size, ncols=size)
raster::values(r) <- m
raster::plot(r, col=c(0,1), legend=F))
正如您在下面看到的字母&#34; a&#34;和&#34; b&#34;它不是很完美。 我在这里寻找更好的解决方案。
答案 0 :(得分:1)
有趣的想法,但您可以直接使用Pixel字体。例如&#34; font.c&#34;来自SGI的OpenGL SDK:
charList <- list()
c(0x00, 0x00, 0x7d, 0xc3, 0xc3, 0xc3, 0x7f, 0x03, 0x7e, 0x00, 0x00, 0x00, 0x00) -> charList$a
c(0x00, 0x00, 0xfe, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0) -> charList$b
c(0x00, 0x00, 0x7f, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00) -> charList$c
apply(sapply(charList$a, intToBits)[1:12,1:12], c(1,2), as.integer) -> m
anticolockRotateMat <- function(x) apply(x,1,rev)
r <- raster::raster(nrows=12, ncols=12)
raster::values(r) <- (1-anticolockRotateMat(m))[,12:1]
raster::plot(r, col=c(0,1), legend=F)
可以在Open GL源代码中找到完整的Hex代码。您也可以使用其他像素字体(如果您获得十六进制代码)。有很多8位免费字体在线。