purebasic.info

PureBasic forum
Текущее время: Пн дек 10, 2018 7:16 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Получить RGB из WIN числа
СообщениеДобавлено: Пн май 07, 2018 6:04 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 708
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
на всякий случай формула туда
red + green * 256 + blue * 65536

как винда из этого числа вытаскивает отдельные составляющие? что на что делить нужно?
нужна обратная формула
в гугле всё сводится к обращению к АПИ


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Пн май 07, 2018 7:16 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6412
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
Код:
1
2
3
4
5
6
7
8
9
10
Color = 3861420
 
    B = Color / 65536
    G = (Color / 256) % 256
    R = Color % 256
   
    Debug R
    Debug G
    Debug B
   


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Пн май 07, 2018 9:51 am 
Не в сети
доцент

Зарегистрирован: Пн мар 26, 2018 9:09 pm
Сообщений: 40
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Пункты репутации: 0
Можно и без использования четырех математических вычислений путем извлечения данных из структуры.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Structure col
      R.a
      G.a
      B.a
    EndStructure  
   
    color=3861420
    *color2.col=@color
   
    rr=*color2\R
    gg=*color2\G
    bb=*color2\B
   
    Debug rr
    Debug gg
    Debug bb
   
    Debug "math"
   
    B = color / 65536
    G = (color / 256) % 256
    R = color % 256
   
    Debug R
    Debug G
    Debug B



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Пн май 07, 2018 10:37 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11335
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
Код:
1
2
3
4
5
6
7
8
9
red = 1
green = 2
blue = 3
 
Color = red + green * 256 + blue * 65536
 
Debug Red(Color)
Debug Green(Color)
Debug Blue(Color)


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Пн май 07, 2018 11:14 am 
Не в сети
доцент

Зарегистрирован: Пн мар 26, 2018 9:09 pm
Сообщений: 40
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Пункты репутации: 0
Ну, конечно. Можно же использовать функции не вошедшие в описания стандартных библиотечных функций PB: Red(), Green(), Blue(), Alpha(), RGB(), RGBA().
Тогда рационально и формирование цвета написать:
Код:
1
Color = RGB(red, green, blue)



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Пн май 07, 2018 11:50 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11335
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
Piter писал(а):
функции не вошедшие в описания стандартных библиотечных функций PB: Red(), Green(), Blue()
Функции из 2DDrawing. https://www.purebasic.com/documentation ... index.html

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Пн май 07, 2018 12:16 pm 
Не в сети
доцент

Зарегистрирован: Пн мар 26, 2018 9:09 pm
Сообщений: 40
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Пункты репутации: 0
Совершенно верно. Сейчас входит в 2DDrawing. А в 5.11 не входило. Причем по истории не вычислить когда переместили. В 5.44 уже есть. Можно все версии скачать и посмотреть.
Для разных ситуаций пользуюсь разными версиями. Из-за отсутствия возможности в 5.6Х компилировать в ASCII, приходится иногда использовать 5.11.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Пн май 07, 2018 12:21 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11335
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
В 5.11 функции в разделе Misc справки.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Пн май 07, 2018 12:24 pm 
Не в сети
доцент

Зарегистрирован: Пн мар 26, 2018 9:09 pm
Сообщений: 40
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Пункты репутации: 0
Так про то и говорю :D
Цитата:
PureBasic - Misc
Overview
This library contains various functions that do not really fit into another library.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Пн май 07, 2018 12:50 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6412
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
Оба Петра, банальности пишите. Вопрос стоял именно так
Цитата:
что на что делить нужно?
нужна обратная формула

Я написал обратную формулу. Остальное флуд.

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Пн май 07, 2018 1:07 pm 
Не в сети
доцент

Зарегистрирован: Пн мар 26, 2018 9:09 pm
Сообщений: 40
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Пункты репутации: 0
Наверное все таки не совсем флуд.
Вопрос стоял:
Цитата:
Получить RGB из WIN числа

Цитата:
на всякий случай формула туда red + green * 256 + blue * 65536

Цитата:
как винда из этого числа вытаскивает отдельные составляющие?

Цитата:
что на что делить нужно?

Цитата:
нужна обратная формула

Искали оптимальные решения для первой части вопроса и предоставили несколько вариантов.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Пн май 07, 2018 1:24 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6412
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
Piter писал(а):
Искали оптимальные решения

Оптимальное решение тупо использовать встроенные функции Red(), Green(), Blue() :D
И не париться!

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Вт май 08, 2018 5:42 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 708
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
Ну понятно, праздники, все датые, иначе и не объяснить предложение использовать Red(), Green(), Blue() :D
Сообщение kvitaliy » 07 май 2018, 07:16 - утро, предлагает формулу
Сообщение kvitaliy » 07 май 2018, 13:24 - обед, предлагает не париЦа


kvitaliy писал(а):
Оптимальное решение тупо использовать встроенные функции Red(), Green(), Blue() :D
И не париться!

ты не прав, математикой намного быстрей чем эти функции

но меня таки смущают дроби, на них то я и завис
результат может зависить от того как округление сделано в конкретном языке, или я тут не прав и можно забить на это?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Вт май 08, 2018 9:50 am 
Не в сети
доцент

Зарегистрирован: Пн мар 26, 2018 9:09 pm
Сообщений: 40
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Пункты репутации: 0
newJS писал(а):
...математикой намного быстрей чем эти функции...

Математика-математике рознь. Если это сложение/вычитание, деление/умножение на 2 и кратные (степенные) значения, то это быстро. Другое - медленнее.
Однако, пришлось провести исследование разных предложенных вариантов: математикой, встроенными функциями и предложенным извлечением из структуры.
Разница оказалась не такой существенной (до 15%), что можно не обращать внимания и пользоваться любым способом.
Делалось 10 циклов по 1 миллиону вычислений на каждый способ для усреднения значений.
Результаты можно посмотреть самим.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Structure col
R.a
G.a
B.a
EndStructure
 
Procedure.s JoinArr(Array arr(1))
  Protected sz, str_o.s="",sum=0
  sz=ArraySize(arr())
  For i=0 To sz-1
    str_o=str_o+Str(arr(i))+"; "
    sum=sum+arr(i)
  Next
  str_o=str_o+Str(arr(sz))
  sum=sum+arr(sz)
  str_o=str_o+" = "+Str(sum/sz)
  ProcedureReturn str_o
EndProcedure  
 
color=3861420
 *color2.col=@color
 
 Dim Array_1(9)
Dim Array_2(9)  
Dim Array_3(9)
 
For ii=0 To 9
 
   stt=ElapsedMilliseconds()
    For i=1 To 1000000
        B = color / 65536
      G = (color / 256) % 256
      R = color % 256
    Next
   
    Array_1(ii)=ElapsedMilliseconds()-stt
   
    stt=ElapsedMilliseconds()
    For i=1 To 1000000
      R=Red(Color)
      G=Green(Color)
      B=Blue(Color)
    Next
    Array_2(ii)=ElapsedMilliseconds()-stt
   
 
    stt=ElapsedMilliseconds()
    For i=1 To 1000000
      rr=*color2\R
      gg=*color2\G
      bb=*color2\B
    Next
   
    Array_3(ii)=ElapsedMilliseconds()-stt
Next
 
Debug "Loop_1_math - "+JoinArr(Array_1())
Debug "Loop_2_foo - "+JoinArr(Array_2())
Debug "Loop_3_stru - "+JoinArr(Array_3())



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Получить RGB из WIN числа
СообщениеДобавлено: Вт май 08, 2018 12:19 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6412
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
newJS писал(а):
но меня таки смущают дроби, на них то я и завис
результат может зависить от того как округление сделано в конкретном языке, или я тут не прав и можно забить на это?

Скажу так, что в VB6 нет встроенных функций Red(), Green(), Blue() и этот "математический" способ основной.
Естественно, всё работает как положено, и не я это изобрёл, просто переписал на PB.

И в моих словах нет противоречия. Ты просил математику - ты её получил. Хочешь заморочиться - пиши свою функцию на основе математики, не хочешь - используй готовые.
Как верно подметил Пiтeр, разницы ни кто не заметит в готовой проге.

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Google [Bot] и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB