1
0
Fork 0

Speed up TGA encoding by creating fewer strings

This commit is contained in:
Nils Dagsson Moskopp 2021-11-04 15:15:28 +01:00
parent 52e5c955f0
commit 3f60b5baa6
Signed by untrusted user who does not match committer: erle
GPG Key ID: A3BC671C35191080
1 changed files with 4 additions and 3 deletions

View File

@ -47,13 +47,13 @@ function image:encode_data()
local current_pixel = '' local current_pixel = ''
local previous_pixel = '' local previous_pixel = ''
local count = 1 local count = 1
local encoded = '' local packets = {}
local rle_packet = '' local rle_packet = ''
for _, row in ipairs(self.pixels) do for _, row in ipairs(self.pixels) do
for _, pixel in ipairs(row) do for _, pixel in ipairs(row) do
current_pixel = string.char(pixel[3], pixel[2], pixel[1]) current_pixel = string.char(pixel[3], pixel[2], pixel[1])
if current_pixel ~= previous_pixel or count == 128 then if current_pixel ~= previous_pixel or count == 128 then
encoded = encoded .. rle_packet packets[#packets +1] = rle_packet
count = 1 count = 1
previous_pixel = current_pixel previous_pixel = current_pixel
else else
@ -62,7 +62,8 @@ function image:encode_data()
rle_packet = string.char(128 + count - 1) .. current_pixel rle_packet = string.char(128 + count - 1) .. current_pixel
end end
end end
self.data = self.data .. encoded .. rle_packet packets[#packets +1] = rle_packet
self.data = self.data .. table.concat(packets)
end end
function image:encode_footer() function image:encode_footer()