[#1] Jak dostac wartosci RGB z ColorMap?
Czesc,
z GetRGB32() dostaje
The ULONG data pointed to by 'table' will be filled with the 32 bit
fractional RGB
values from the colormap.

i co dalej robie z tymi "fractional values"?

Byc moze pytam o cos oczywistego bo wczoraj zrobilem tylko jedno podejscie i moglem cos pomylic.. w kazdym razie to co otrzymalem w tablicy na wyjsciu myslalem ze bedzie np: 160,160,160,0,0,0,208,108,74 ... itd - ale chyba nie bylo...


Dodane:
teraz to juz fantazjuje ale czy moge uzyc GetRGB4()
return UWORD RGB value 4 bits per gun right justified


no ale wtedy dostane 4bity na kolor czyli max 15? (%1111) .. a gdzie wartosci do 255?

Ostatnia aktualizacja: 12.12.2021 08:45:55 przez pch
[#2] Re: Jak dostac wartosci RGB z ColorMap?

@pch, post #1

przykładowo kolor rgb $ABCDEF to 3 ulongi przeskalowane do 32 bitów: $ABABABAB, $CDCDCDCD, $EFEFEFEF, czyli w praktyce istotny jest najstarszy bajt każdego ulonga.
1
[#3] Re: Jak dostac wartosci RGB z ColorMap?

@cholok, post #2

Dziala, dzieki OK
[#4] Re: Jak dostac wartosci RGB z ColorMap?

@pch, post #3

No to teraz w druga strone...
Wlasnie do tego usiadlem i widze ze musze powielic (przeskalowac) bajta do longa , znaczy np:
"A1" do "A1A1A1A1"

Jak sie takie cos robi? Czy tak:
- "logical shift left" o 8 by dostac "0000A100"
- dodaje "A1"
- wynik zow shiftuje o 8 w lewo i dodaje A1
-i znowu to powtarzam
-i mam A1A1A1A1

jak smieszne to sorry :)


Ostatnia aktualizacja: 13.12.2021 18:34:30 przez pch
[#5] Re: Jak dostac wartosci RGB z ColorMap?

@pch, post #4

Moze byc tak jak podales, choc sa tez szybsze wersje. A najszybciej to bedzie albo przez tablice 256x4. Albo dla szybszych procesorow (68060+, moze 68040 tez) cos takiego:

moveq #0,D0
move.b (A0),D0 ; kopiuj/wez bajt do sklonowania/przeskalowania
mulu.l #$01010101,D0
[#6] Re: Jak dostac wartosci RGB z ColorMap?

@Don_Adan, post #5

A mozesz rozwinac "przez tablice 256x4"?
[#7] Re: Jak dostac wartosci RGB z ColorMap?

@pch, post #4

Sprawdź sobie doświadczalnie, ale jestem prawie pewny, że skalowanie jest ignorowane, bo te funkcje były na wyrost projektowane. Ustaw zera byle najstarszy bajt się zgadzał.
[#8] Re: Jak dostac wartosci RGB z ColorMap?

@pch, post #6

Tak. Tworzysz tablice 1024 bajtowa cos w tym stylu:

even
Table
dc.l $00000000
dc.l $01010101
dc.l $02020202
....

dc.l $FFFFFFFF

Tworzenie takiej tablicy moze wygladac tak:

lea Table,A0   ; 1024 bajty
 move.l #$01010101,D1
 move.w #256-1,D7    ; loop counter
 moveq #0,D0
loop
 move.l D0,(A0)+
 add.l D1,D0
dbf D7,loop

A potem odczytujesz z niej za pomoca, np.:

moveq #0,D0
move.b (A0),D0 ; bajt do sklonowania
lea Table,A0
lsl.w #2,D0 ; *4 word wystarczy
move.l (A0,D0.W),D0
Choc oczywiscie zalezy na jakim procesorze to ma dzialac. To jest wersja dzialajaca na wszystkich 68k.
[#9] Re: Jak dostac wartosci RGB z ColorMap?

@Don_Adan, post #8

Ewentualnie, najkrotsza i uniwersalna wersja dzialajaca od 68000 wzwyz:

move.w D0,-(SP)
 move.b D0,(SP)
 move.l (SP),D0
 move.w (SP)+,D0


Ostatnia aktualizacja: 13.12.2021 20:01:38 przez Don_Adan

Ostatnia aktualizacja: 13.12.2021 20:01:46 przez Don_Adan

Ostatnia aktualizacja: 13.12.2021 20:02:03 przez Don_Adan

Ostatnia aktualizacja: 13.12.2021 20:02:23 przez Don_Adan
Jakos nie moge poprawic tego pierwszego move.w brzydko wyglada.

Ostatnia aktualizacja: 13.12.2021 20:03:11 przez Don_Adan
[#10] Re: Jak dostac wartosci RGB z ColorMap?

@cholok, post #7

@cholok
pewnie masz racje, chociaz na ten moment zrobilem tak jak sam zaproponowalem - ale sprawdze czy faktycznie zera tam moga byc.

@Don_Adan
dzieki za rozjasnienie - heh, ta tablica byla tak oczywista, no ale jakos nie pomyslalem...
[#11] Re: Jak dostac wartosci RGB z ColorMap?

@pch, post #10

Tablica jest bardziej uniwersalna bo mozesz dowolne wartosci przypisac do kazdego bajta, bo wartosci w tabeli nie musza byc wcale wyliczane. Czyli mozna cos skorygowac lub spie.... zalezy co kto lubi lub woli.
[#12] Re: Jak dostac wartosci RGB z ColorMap?

@pch, post #4

Ja zawsze stosowalem metode w ten desen:

ULONG KolorR;

KolorR = skladowaR << 24;


Zawsze dzialalo i nie bylo z tym problemow.
[#13] Re: Jak dostac wartosci RGB z ColorMap?

@Phibrizzo, post #12

Czyli potwierdziles to co cholok napisal
... Ustaw zera byle najstarszy bajt się zgadzał.


Bardzo mnie to cieszy OK
[#14] Re: Jak dostac wartosci RGB z ColorMap?

@Phibrizzo, post #12

Zakladajac, ze pozostale bajty sa wyzerowane, to szybszy bedzie obrot o 8 bitow w prawo (1 instrukcja) , niz przesuniecie o 24 bity w lewo (minimum 2 instrukcje). Cos takiego np.:

ror.l #8,D0
[#15] Re: Jak dostac wartosci RGB z ColorMap?

@pch, post #13

Tylko lepiej sprawdz jak jest w oficjalnej dokumentacji Amiga OS, bo jezeli tam jest A1A1A1A1 a nie A1000000, to calkiem mozliwe, ze w jakims Amiga OS 3.7 albo 3.13 to zmienia/naprawia, bo Amiga OS dla 68k bedzie raczej caly czas rozwijany bo z tego jest kasa. I wtedy Twoj program przestanie dzialac jak nalezy a Thor napisze cos w stylu "Ze to zostalo naprawione w Amiga OS 3.xx i wszystkie prawidlowo napisane programy dzialaja Ok, a zle napisane powinny zostac poprawione".
[#16] Re: Jak dostac wartosci RGB z ColorMap?

@cholok, post #7

Z tego co wiem, to warto ustawić wszystkie bajty, bo inaczej są drobniutkie różnice w nasyceniu składowych kolorów.

Ja używam makra w C:

#define RGB(c) ((c)|((c)<<8)|((c)<<16)|((c)<<24))


Ostatnia aktualizacja: 14.12.2021 06:59:39 przez Hexmage960
[#17] Re: Jak dostac wartosci RGB z ColorMap?

@Hexmage960, post #16

Tak chyba bardziej optymalnie:
#define RGB(c) (((((c)<<8|(c))<<8)|(c))<<(8))|(c)
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem