Что нового

[Ошибки] Перевернутое значение цвета в _ColorGetRGB

SemEMP

Знающий
Сообщения
42
Репутация
7
При получении цветов заливок ящеек из Excell заметил, что функция
Код:
_ColorGetRGB
вместо RGB состовляющей выдаёт BGR состовляющую.
Код:
#include <Excel.au3>
#include <Array.au3>
#include <Color.au3>

Dim $a[1],$t[5], $b[5][5]
$oExcel =_ExcelBookAttach ('Коор.xls','filename')
$t[0]=$oExcel.ActiveSheet.Range('B2').Interior.Color
$t[1]=$oExcel.ActiveSheet.Range('C2').interior.Color
$t[2]=$oExcel.ActiveSheet.Range('D2').interior.Color
$t[3]=$oExcel.ActiveSheet.Range('D4').interior.Color
$t[4]=$oExcel.ActiveSheet.Range('D5').interior.Color
for $i=0 to UBound($t)-1
	$b1= _ColorGetRGB ($t[$i])
	for $k=0 to UBound($b1)-1
		$b[$i][$k]=$b1[$k]
	Next
	$b[$i][3]=$t[$i]
Next
$b[0][4]='красный'
$b[1][4]='нет заливки'
$b[2][4]='нет заливки'
$b[3][4]='зелёный'
$b[4][4]='синий'
_ArrayDisplay($b)


Сам Excel файл прикрепил
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Так и должно быть, потому что Windows работает именно с BGR. Вам нужно просто преобразовать цвет из RGB в BGR.

Код:
BitOR(BitAND($Color, 0x00FF00), BitShift(BitAND($Color, 0x0000FF), -16), BitShift(BitAND($Color, 0xFF0000), 16))
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
Вам нужно просто преобразовать цвет из RGB в BGR
Так а для чего тогда функция _ColorGetRGB?


Добавлено:
Сообщение автоматически объединено:

Странное поведение функции.

Возвращает не в формате (последовательности) RGB, а компоненты цвета в порядке RGB.

Т.е [0] в массиве это представление красного в RGB, и т.д.
Не вижу тогда применения этой функции.


Добавлено:
Сообщение автоматически объединено:

SemEMP
Можно тогда вот так перевернуть значения:

Код:
For $i = 0 To UBound($t) - 1
	$b1 = _ColorGetRGB($t[$i])
	
	For $k = 0 To UBound($b1) - 1
		$b[$i][$k] = $b1[UBound($b1) - 1 - $k]
	Next
	
	$b[$i][3] = $t[$i]
Next


Я только изменил строчку $b1[UBound($b1) - 1 - $k].
 
Верх