我目前正在使用Microsoft Small Basic做一个有趣的项目,虽然我已经卡住了。
我有一个数组可以导出到任何格式的文件,它使用字节作为最小的东西,例如csv。 每个像素都是一个十六进制值,FFFFFF说,它被放入一个文件,如:
FFFFFF,000000,FFF000,000FFF
000AAA,AAAAAA,AAA000,000000
等...
有什么方法可以把它变成bmp文件或其他光栅格式的图像。
答案 0 :(得分:1)
也许你可以用NetPBM的PPM
格式写出你的图像,这种格式非常简单并且在维基百科here上有记录。
因此,例如以下(放大的)3x2图像:
看起来像这样(每行#
后面的部分是我的评论):
P3 # P3 means ASCII, 3-channel RGB
3 2 # width=3, height=2
255 # MAX=255, therefore 8-bit
255 0 0 0 255 0 0 0 255 # top row of pixels in RGB order
0 255 255 255 0 255 255 255 0 # bottom row of pixels in RGB order
然后你可以使用 ImageMagick ,它安装在大多数Linux发行版上,可用于macOS和Windows,在命令行中将它变成BMP,如下所示:
magick input.ppm output.bmp
或者,如果您想要具有对比度拉伸的JPEG并将其调整为800x600:
magick input.ppm -resize 800x600 -auto-level output.jpg
您可以使用 GIMP , Adobe Photoshop 进行转换,可能 MS Paint ,可能是 IrfanView ,或使用NetPBM工具包。例如,使用NetPBM工具(重量轻比 ImageMagick ),转换将是:
ppmtobmp image.ppm > result.bmp
答案 1 :(得分:1)
基于Mark的精彩答案,使用ImageMagick和Unix脚本,可以做到以下几点:
Convert your text file so as to replace commas with new lines, then add leading # to your hex values and store in an array (arr)
Then change each hex value into colors as rgb triplets in the range 0-255 integers with spaces between the 3 values and put into a new array (colors).
Find out how many rows and columns you have in your text file.
Then convert the array of colors into a PPM image and convert that image to bmp while enlarging to 300x200.
这是相应的代码:
arr=()
colors=()
arr=(`cat test.txt | tr "," "\n" | sed 's/^/#/'`)
num=${#arr[*]}
for ((i=0; i<num; i++)); do
colors[i]=`convert xc:"${arr[$i]}" -format "%[fx:round(255*u.r)] %[fx:round(255*u.g)] %[fx:round(255*u.b)]" info:`
done
numrows=`cat test.txt | wc -l`
numvalues=`cat test.txt | tr "," " " | wc -w`
numcols=`echo "scale=0; $values/$rows" | bc`
echo "P3 $numcols $numrows 255 ${colors[*]}" | convert - -scale 400x200 result.bmp
注意:我必须在最后一个颜色字符后面的文本文件中添加一个新行,以便wc -l计算正确的行数。那就是文件必须以换行符结束。