1 (изменено: serzh82saratov, 2015-11-22 22:59:13)

Тема: AHK: Конвертация ARGB в RGB

Сделал такой вариант:

ARGB := 0xeeabcdef

MsgBox % RGBFromARGB(ARGB)
  
RGBFromARGB(ARGB)  {    
	Return "0x" SubStr(Format("{:08x}", ARGB), 3)
}

Но думаю, что есть более производительные варианты.

Видел например такое:

ARGBtoRGB( ARGB )
    {
        VarSetCapacity( RGB,6,0 )
        DllCall( "msvcrt.dll\sprintf", Str,RGB, Str,"%06X", UInt,ARGB<<8 )
        Return "0x" RGB
    }

Но не работает.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2

Re: AHK: Конвертация ARGB в RGB

Опишите, пожалуйста, по-русски название темы и её суть.

3

Re: AHK: Конвертация ARGB в RGB

Если задача освободиться от старшего байта, то так:

ARGB := 0xeeabcdef
SetFormat, IntegerFast, H
MsgBox, % "RGB = " 0xFFFFFF & ARGB
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: Конвертация ARGB в RGB

Хотелось бы возвращать именно ввиде "RGB", то есть из:

0xff000001

вернуть не 0x1, а 0x000001.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5

Re: AHK: Конвертация ARGB в RGB

Тогда без форматирования строки не обойтись:

ARGB := 0xee0000ab

MsgBox % Format("0x{:06X}", ARGB & 0xFFFFFF)
; или
MsgBox % Format("{:#08x}", ARGB & 0xFFFFFF)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Конвертация ARGB в RGB

Да, так быстрее чем в первом посте аж в полтора раза, хотя казалось бы тоже самое.

Format("0x{:06X}", ARGB & 0xFFFFFF)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7

Re: AHK: Конвертация ARGB в RGB

Просто на битовые операции тратится предельно мало ресурсов.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder