A1R5G5B5 Битовые маски:
ARRR RRGG GGGB BBBB
ALPHA: 1000 0000 0000 0000 - 0x8000
RED: 0111 1100 0000 0000 - 0x7c00
GREEN: 0000 0011 1110 0000 - 0x3e0
BLUE: 0000 0000 0001 1111 - 0x1f
Используйте битовую маску с оператором побитового И , чтобы получить значение:
$word = /* two-byte (two octets) value per pixel */
$alpha = $word & 0x8000;
$red = $word & 0x7c00;
...
Hopeэто помогает.Функция PHP, которая дает вам целочисленное значение для двоичного числа в PHP: bindec
, функция для преобразования целого числа в шестнадцатеричное число: dechex
.Эти функции полезны для создания шестнадцатеричного числа битовой маски из PHP.
Вы также можете использовать калькулятор для преобразования двоичных, десятичных и шестнадцатеричных чисел, например, с помощью такого калькулятора, как gcalctool .
Пример кода:
/**
* unpack a binary string word of a
* A1R5G5B5 color into an array of
* RGBA integer 8bit values.
*
* @param string $word
* @return array('red' => int, 'green' => int, 'blue' => int, 'alpha' => int)
*/
function wordA1R5G5B5ToArrayRGBA($word)
{
// unpack values from bit-fields
list(, $dec) = unpack('n', $word);
$blue = ($dec & 0x1F);
$green = ($dec & 0x3E0) >> 5;
$red = ($dec & 0x7C00) >> 10;
$alpha = ($dec & 0x8000) >> 15;
// map 5bit to 8bit (alpha: 1bit to 8bit)
$blue = ($blue << 3) | ($blue * 0x7 / 0x1F);
$green = ($green << 3) | ($green * 0x7 / 0x1F);
$red = ($red << 3) | ($red * 0x7 / 0x1F);
$alpha && $alpha = 0xFF;
return compact('red', 'green', 'blue', 'alpha');
}