Не пойму как это сделать .
Мне понадобилось хранить гистограмму цветов
(Ну типа какой цвет в картинке сколько раз встретился)
ну как Record в языке сделать я не понял
, решил всё хранить в массиве - картинки у меня большие да и цветов там немного , поэтому на первом этапе решил сделать всё максимально просто и не заморачиваться с накладными расходами на добавление элемента(и использовать стандартную функцию _ArrayAdd) вот застопорился не могу добавить в массив [[int,string,int],[int,string,int]....[int,string,int]] элемент [int,string,int]
Мне понадобилось хранить гистограмму цветов
(Ну типа какой цвет в картинке сколько раз встретился)
ну как Record в языке сделать я не понял
, решил всё хранить в массиве - картинки у меня большие да и цветов там немного , поэтому на первом этапе решил сделать всё максимально просто и не заморачиваться с накладными расходами на добавление элемента(и использовать стандартную функцию _ArrayAdd) вот застопорился не могу добавить в массив [[int,string,int],[int,string,int]....[int,string,int]] элемент [int,string,int]
Код:
<...skipped...>
Global $iColorGisto[1][3]=[[0xFFFFFF,"0xFFFFFF",1]]
;Global $iColorGisto[5][2]=[[0xFFFFFF,"0xFFFFFF",1],[0xFFFFFA,"0xFFFFFA",2],[0xFFFFFB,"0xFFFFFB",3],[0xFFFFFC,"0xFFFFFC",4],[0xFFFFFD,"0xFFFFFD",5]]
for $i=0 TO $iX-1
for $j=0 TO $iY-1
$PixelColor=_GDIPlus_BitmapGetPixel($hImage,$i,$j)
If ($PixelColor <> 0xFFFFFF)Then
$color_index=FindColorIndex($PixelColor)
if ($color_index<UBound($iColorGisto,1)) Then
$iColorGisto[$color_index][2]=$iColorGisto[$color_index][2]+1
Else
;вот здесь не пойму что писать
; все равно надо выделить память
;под элемент
;$val_to_add[3] = [ $PixelColor,"0x" & Hex($PixelColor,6),1]
;чтобы он не умер как локальная память по завершению процедуры
;как обойтись без оператора new не понимаю.
$color_index=_ArrayAdd($iColorGisto,"") ;это не работает
$iColorGisto[$color_index][0]=$PixelColor ; =(
$iColorGisto[$color_index][1]=hex($PixelColor,6) ; =(
$iColorGisto[$color_index][2]=1 ; =(
;$color_index=_ArrayAdd($iColorGisto,[ $PixelColor,"0x" & Hex($PixelColor,6),1]) ;это тоже не работает
EndIf ;if ($color_index<UBound($iColorGisto,1)) Then
EndIf; If ($PixelColor <> 0xFFFFFF)Then
Next
Next
_ArrayDisplay($iColorGisto)
_GDIPlus_ShutDown ()
func FindColorIndex($color)
local $i=0
for $i=0 to UBound($iColorGisto,1)-1
if($color == $iColorGisto[$i][0])Then
Return $i
EndIf
Next
Return $i
EndFunc