forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Get_Color -> SetColor (http://forum.boolean.name/showthread.php?t=15614)

bgmenot 07.10.2011 16:20

Get_Color -> SetColor
 
Всем привет. У меня проблема :SOS: . Есть одна функция (библиотека Lib_cnv2), Get_Color(X, Y : Integer) : Integer;
Она возвращает цвет пикселя из заданных координат. Так вот проблема в том, что она возвращает одно большое число. А мне, для использования её в SetColor(R,G,B ) нужны три числа. Вопрос: Как, с помощью битовых сдвигов получить нужные значения цветов? Всем заранее спасибо за ответ.

P.s Вот код функции Get_Color:
PHP код:

public static int get_color(int iint j)
    {
        
int ai[] = new int[1];
        
M.I.getRGB(ai01ij11);
        return 
ai[0] & 0xffffff;
    } 


ViNT 07.10.2011 18:56

Ответ: Get_Color -> SetColor
 
Первый байт получаем операцией b:=color and 0xFF, три других - b:=(color shr 8) and 0xFF, b:=(color shr 16) and 0xFF и b:=(color shr 24) and 0xFF, вроде так. В каком порядке там идут байты - не помню, по-моему, AARRGGBB.

alexprey 07.10.2011 20:25

Ответ: Get_Color -> SetColor
 
судя по & 0xffffff; То там только RGB

bgmenot 19.10.2011 19:44

Ответ: Get_Color -> SetColor
 
Цитата:

Сообщение от ViNT (Сообщение 205019)
Первый байт получаем операцией b:=color and 0xFF, три других - b:=(color shr 8) and 0xFF, b:=(color shr 16) and 0xFF и b:=(color shr 24) and 0xFF, вроде так. В каком порядке там идут байты - не помню, по-моему, AARRGGBB.

А наоборот как?

ViNT 19.10.2011 20:09

Ответ: Get_Color -> SetColor
 
Как-то так
Код:

C:=B or (G shl 8) or (R shl 16);

barsunduk 02.11.2011 23:45

Ответ: Get_Color -> SetColor
 
Цитата:

Сообщение от ViNT (Сообщение 206337)
Как-то так
Код:

C:=B and (G shl 8) and (R shl 16);

тогда уж так, по-моему:
Код:

C := B or (G shl 8) or (R shl 16);

ViNT 03.11.2011 16:15

Ответ: Get_Color -> SetColor
 
Цитата:

Сообщение от barsunduk (Сообщение 208083)
тогда уж так, по-моему:
Код:

C := B or (G shl 8) or (R shl 16);

Да, именно так, это я напутал.


Часовой пояс GMT +4, время: 03:35.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot