标题看起来可能很愚蠢,但我真的找不出问题所在,我创建了一个自定义函数,以像C++中的方式那样进行子字符串,因为我喜欢它:
local function SubStr(String, Start, Count)
return String:sub(Start, Start+(Count-1))
end这是我正在使用的代码,子字符串函数似乎适用于位深度、宽度和高度,尽管当读取颜色值时,它似乎抵消了一吨,我不知道它是什么:
print("BitDepth", SubStr(Text, 1, 8))
print("Width", SubStr(Text, 9, 8))
print("Height", SubStr(Text, 17, 8))
Image["BitDepth"] = tonumber(SubStr(Text, 1, 8), 2)
Image["Width"] = tonumber(SubStr(Text, 9, 8), 2)
Image["Height"] = tonumber(SubStr(Text, 17, 8), 2)
for i = 1, Image["BitDepth"] do
Image["Colours"] = {};
Image["Colours"][i] = {};
print("RED", SubStr(Text, (24*i), 8))
print("BLUE", SubStr(Text, (24*i)+8, 8))
print("GREEN", SubStr(Text, (24*i)+16, 8))
print("ALPHA", SubStr(Text, (24*i)+24, 8))

当i = 1时,预期的二进制颜色值应该都是11111111
顺便说一下,它正在读取以下二进制字符串:
000000110000100000001000111111111111111111111111000000000000000000000000111111110000000000000000000000000000000011111111
发布于 2022-07-28 20:55:51
我做了一些修改,测试一下。第一偏移从25开始,第二偏移从32的倍数开始。
-- New v**strong text**ariables
offset = 25
count = 0; -- count is essentially (i - 1)
for i = 1, Image["BitDepth"] do
Image["Colours"] = {};
Image["Colours"][i] = {};
print(i)
-- first_offset + second_offset + third_offset
print("RED", SubStr(Text, offset + (32*count), 8))
print("BLUE", SubStr(Text, offset + (32*count)+8, 8))
print("GREEN", SubStr(Text, offset + (32*count)+16, 8))
print("ALPHA", SubStr(Text, offset + (32*count)+24, 8))
count = count + 1
end发布于 2022-07-28 20:45:27
3x8是24。下一个值从25开始,而不是24。
https://stackoverflow.com/questions/73158399
复制相似问题