为了:
- 以编程方式绘制图像。
我们正在谈论位图,这意味着不幸的是,您需要单独处理每个字节,除非您更愿意使用文档较少的svg
词汇表,这似乎功能不足。
好消息是 Factor 有很多用于处理数组的高阶函数。此外,听起来很有前途的images.processing
词汇并没有太多的词来形容这类事情。
您实际上想要做的(据我所知)是制作一个有效的文件头,然后将图像数据和头写入.bmp
文件。
- 显示它。
不太容易。似乎ui.images
需要一个image-name
(无论是什么——实现path>>
的东西,所以它可能需要一个流或文件对象?)显然display
它在当前的 UIworld
中,如果你已经有一个 UI,这可能更简单。
看看world
's 的构造函数:
TUPLE: world < track
active? focused? grab-input? fullscreen? saved-position
layers title status status-owner text-handle handle images
window-loc pixel-format-attributes background-color promise
window-controls window-resources ;
妈的,儿子。
- 将其保存在某个文件中。
这个我实际上可以给出一个实现,因为一旦你掌握了它,它就非常简单。
你在文件夹中有一张图片,我们将把它加载到监听器中。(再次,展示它是一个完整的“另一个故事”)。
USING: images.bitmap io.encodings.binary io.files ;
: bmp-open ( path -- stream ) binary <file-reader> load-bitmap ;
<file-reader>
需要 apath
和 an encoding
(from io.encodings
),并将 anio.stream
留在堆栈上,这就是load-png
, load-bitmap
etc 正在寻找的内容。
这会给我们一个loading-bmp
,它比听起来更有用。
T{ loading-bitmap
{ file-header
T{ file-header
{ size 12726 }
{ offset 54 }
{ header-length 40 }
}
}
{ header
T{ v3-header
{ width 64 }
{ height 66 }
{ planes 1 }
{ bit-count 24 }
{ image-size 12672 }
}
}
{ color-index
B{
255 255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 255 255 255 255 255
255 255 255 255 255 255 255 255 ~12573 more~
}
}
}
您要查找的数据显然在color-index>>
.
dup color-index>>
--- Data stack:
T{ loading-bitmap f ~file-header~ ~v3-header~ f ~byte-array~ f }
B{ 255 255 255 255 255 255 255 255 255 255 255 255 255 255...
你可以随心所欲地弄乱那个数组,然后就这样做>>color-index
(或弄乱loading-bitmap
's 的构造函数),然后将这些字节写入文件。
TUPLE: loading-bitmap
file-header header color-palette color-index bitfields ;
类似loading-bitmap>bytes
或bitmap>bytes
应该帮助你的东西。
当我昨晚写这个答案时,我完全没想到要在RosettaCode上寻找与位图相关的东西。