конвертировать из HEX в ARGB

Стэнфорд

Потрачен
Автор темы
1,058
543
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Версия MoonLoader
.027.0-preview
шапка плез хелп
 

Стэнфорд

Потрачен
Автор темы
1,058
543
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
if imgui.ColorEdit4(u8("Цвет1"), c1, imgui.ColorEditFlags.NoInputs + imgui.ColorEditFlags.NoLabel + imgui.ColorEditFlags.NoAlpha) then


local clr = join_argb(0, c1.v[1] * 255, c1.v[2] * 255, c1.v[3] * 255)
print(('%06X'):format(clr))
end

Я получаю цвет в аргб, конвертирую в хекс и сохраняю, как из сохраненного в ини хекс сделать обратно аргб?
 

Rain_Darkness

Участник
248
14
if imgui.ColorEdit4(u8("Цвет1"), c1, imgui.ColorEditFlags.NoInputs + imgui.ColorEditFlags.NoLabel + imgui.ColorEditFlags.NoAlpha) then


local clr = join_argb(0, c1.v[1] * 255, c1.v[2] * 255, c1.v[3] * 255)
print(('%06X'):format(clr))
end

Я получаю цвет в аргб, конвертирую в хекс и сохраняю, как из сохраненного в ини хекс сделать обратно аргб?
Тут я хз, так что гугл в помощь
 

leekyrave

Известный
419
226
Lua:
function hextoargb(hex)
    local hex = hex:gsub("#","")
    r = tonumber("0x"..hex:sub(1,2))
    g = tonumber("0x"..hex:sub(3,4))
    b = tonumber("0x"..hex:sub(5,6))
    a = tonumber("0x"..hex:sub(7,8))
    
    if a == nil then a = 255 end
    return a,r,g,b
end

Возвращает по отдельности а,р,г,б. Если тебе нужно именно argb - просто сджойни с помощью функции ниже

Lua:
function join_argb(a, r, g, b)
    local argb = b  -- b
    argb = bit.bor(argb, bit.lshift(g, 8))  -- g
    argb = bit.bor(argb, bit.lshift(r, 16)) -- r
    argb = bit.bor(argb, bit.lshift(a, 24)) -- a
    return argb
end
 

Стэнфорд

Потрачен
Автор темы
1,058
543
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Lua:
function hextoargb(hex)
    local hex = hex:gsub("#","")
    r = tonumber("0x"..hex:sub(1,2))
    g = tonumber("0x"..hex:sub(3,4))
    b = tonumber("0x"..hex:sub(5,6))
    a = tonumber("0x"..hex:sub(7,8))
  
    if a == nil then a = 255 end
    return a,r,g,b
end

Возвращает по отдельности а,р,г,б. Если тебе нужно именно argb - просто сджойни с помощью функции ниже

Lua:
function join_argb(a, r, g, b)
    local argb = b  -- b
    argb = bit.bor(argb, bit.lshift(g, 8))  -- g
    argb = bit.bor(argb, bit.lshift(r, 16)) -- r
    argb = bit.bor(argb, bit.lshift(a, 24)) -- a
    return argb
end
Зачем, сохраняй сразу как есть
Не очень понимаю, можете помочь в код вставить сохрание и выгрузу через ини?

if imgui.ColorEdit4(u8("Наркотики"), c1) then

end
 
Последнее редактирование:

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,654
2,535
Не очень понимаю, можете помочь в код вставить сохрание и выгрузу через ини?

if imgui.ColorEdit4(u8("Наркотики"), c1) then

end
local clr = join_argb(0, c1.v[1] * 255, c1.v[2] * 255, c1.v[3] * 255)
saveThisColorAndUseLater(clr)
 

Стэнфорд

Потрачен
Автор темы
1,058
543
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
local clr = join_argb(0, c1.v[1] * 255, c1.v[2] * 255, c1.v[3] * 255)
saveThisColorAndUseLater(clr)
Сделал сохранение числа в ини, выгрузку этого числа из ини в переменную. Но выдает ошибку
: stack index 2, expected userdata, received number: value is not a valid userdata (bad argument into 'bool(const char*, ImArray<float,4>*, sol::optional<int>)')
В чем может быть проблема?
 

chapo

чопа сребдс // @moujeek
Модератор
8,869
11,579
Lua:
local inicfg = require 'inicfg'
local directIni = ''
local ini = inicfg.load(inicfg.load({
    main = {
        color = 0xFFff004d,
    },
}, directIni))
inicfg.save(ini, directIni)

function join_argb(a, r, g, b)
    local argb = b  -- b
    argb = bit.bor(argb, bit.lshift(g, 8))  -- g
    argb = bit.bor(argb, bit.lshift(r, 16)) -- r
    argb = bit.bor(argb, bit.lshift(a, 24)) -- a
    return argb
end

function explode_argb(argb)
    local a = bit.band(bit.rshift(argb, 24), 0xFF)
    local r = bit.band(bit.rshift(argb, 16), 0xFF)
    local g = bit.band(bit.rshift(argb, 8), 0xFF)
    local b = bit.band(argb, 0xFF)
    return a, r, g, b
end

local color_HEX = explode_argb(ini.main.color)
local color_argb = imgui.ImFloat4(color_HEX[2], color_HEX[3], color_HEX[4], color_HEX[1])


--save
ini.main.color = join_argb(color_argb.v[4] * 255, color_argb.v[1] * 255, color_argb.v[2] * 255, color_argb.v[3] * 255)
inicfg.save(ini, directIni)
 

Стэнфорд

Потрачен
Автор темы
1,058
543
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Lua:
local inicfg = require 'inicfg'
local directIni = ''
local ini = inicfg.load(inicfg.load({
    main = {
        color = 0xFFff004d,
    },
}, directIni))
inicfg.save(ini, directIni)

function join_argb(a, r, g, b)
    local argb = b  -- b
    argb = bit.bor(argb, bit.lshift(g, 8))  -- g
    argb = bit.bor(argb, bit.lshift(r, 16)) -- r
    argb = bit.bor(argb, bit.lshift(a, 24)) -- a
    return argb
end

function explode_argb(argb)
    local a = bit.band(bit.rshift(argb, 24), 0xFF)
    local r = bit.band(bit.rshift(argb, 16), 0xFF)
    local g = bit.band(bit.rshift(argb, 8), 0xFF)
    local b = bit.band(argb, 0xFF)
    return a, r, g, b
end

local color_HEX = explode_argb(ini.main.color)
local color_argb = imgui.ImFloat4(color_HEX[2], color_HEX[3], color_HEX[4], color_HEX[1])


--save
ini.main.color = join_argb(color_argb.v[4] * 255, color_argb.v[1] * 255, color_argb.v[2] * 255, color_argb.v[3] * 255)
inicfg.save(ini, directIni)
attempt to index local 'color_HEX' (a number value)
 
  • Bug
Реакции: qdIbp