【发布时间】:2018-02-28 04:26:11
【问题描述】:
问题
我正在尝试在 Elixir 中制作一个基本的图像(位图)书写器,但我坚持了一点。
我尝试制作一个函数来将像素设置为二进制文件。我使用模式匹配,但我的功能显然太慢了(超过 10 分钟才能将所有像素设置为大小为 1024 * 768 的图片)。
目前,我有一个大小等于宽度 * 高度的二进制文件。就像您在下面的代码中看到的那样,我的函数将 x 和 y 作为参数,并且必须在此位置修改一个 int。
当前代码
# Function
def replace_by_test(output, width, x, y) do
out_offset = y * width + x
<<
o_before :: binary-size(out_offset),
_ :: binary-size(4),
o_after :: binary
>> = output
<< o_before :: binary, "TEST" :: binary, o_after :: binary >>
end
# Test on a 1024 * 768 resolution image
out_size = 1024 * 768 * 8
output = << 0 :: size(out_size) >>
for x <- 0..(1024*768-1), do: replace_by_test(output, 1024, 0, 0)
目标
让这段代码更快。如果可能,请在 10 秒内运行它。
【问题讨论】:
-
你想用这个实现什么?您在这里创建了一个 786 kb 字符串的副本 786k 次。我认为您无法显着加快速度。对于您要解决的问题,也许有更好的解决方案?
-
@Dogbert 我只是希望能够从像素序列创建图像(例如 List)
-
列表中的像素是连续的吗?例如。
x=0 y=0然后x=0 y=1然后x=0 y=3等等?还是可以随机排列? -
随机顺序
-
您是否正在尝试进行某种隐写术?像@Dogbert 一样,我很难理解你真正想要做什么。
标签: elixir