Enterprise Forever

:HUN => VIDEO: => Topic started by: szipucsu on 2017.November.19. 14:04:12

Title: Színátmenetek
Post by: szipucsu on 2017.November.19. 14:04:12
A színátmenetekkel kapcsolatban nincsenek valahol kész sémák? Színkódok, ahol pl. a sötétkék átmegy fokozatosan világoskékbe. Ilyenekből lehetne sok előre elkészítve, és programozásnál csak ki kéne puskázni onnan.
Ez az oldal (Lgb: EP colours) (http://ep.lgb.hu/colors.html) elég jó.

(Én is azt néztem, nincs külön grafika topik, ahogy sound:, és alatta összeszedve az odavágó topikok, pedig nem lenne rossz.)
Title: Re: Színátmenetek
Post by: ergoGnomik on 2017.November.19. 14:38:19
Szerintem te is tudnál írni rá programot, ami ilyeneket generál. Megadod RGB összetevőkben a kiinduló és befejező színt, megadod a lépések számát, és utána a színösszetevők különbségeit rendre elosztod a lépések számával. A kiinduló szín komponenseihez ismételten hozzáadva az osztás után előállt értékeket, és az eredményeket kerekítve létrehozod az átmenetet. István szerintem valahol leírta már a kódot, amivel az RGB(0..7, 0..7, 0..3) értékeket át lehet alakítani egyetlen 0-tól 255-ig terjedő színértékké, ha erre lenne szükség.

De ha nem számít a színek "tisztasága", hanem elég csak a fényerő, akkor a korábban már István által feltett – legalább is emlékezni vélek ilyenre – átmenet táblázatban kiválasztod a neked tetsző színsort.
Title: Re: Színátmenetek
Post by: endi on 2017.November.19. 14:49:02
a korlátok miatt a legjobb ilyen színátmeneteket kézzel lehet megcsinálni

a demókazettás paletta (amit a gracha-ba is beleraktam, és mások is használják) elég jó ilyen színátmenetek készítéséhez.

igazából valami jó dither algoritmussal lehetne ellensúlyozni a korlátokat
Title: Re: Színátmenetek
Post by: endi on 2017.November.19. 14:58:11
jut eszembe, a pc-s gracha editorban asszem van is ilyen ditherelt színskála funkció

amúgy annak idején én csináltam direkt a raszter bar-ok készítéséhez egy kis basic programot amit minden demómhoz és játékomhoz használtam :)
Title: Re: Színátmenetek
Post by: szipucsu on 2017.November.19. 15:03:28
Én olyasmire gondoltam, hogy pl. egy weboldalon van többféle színátmenetes séma, hozzá a színkódok és kis négyszögekben a színek. De legalább sok ilyen színkód sorozatot érdemes lenne összegyűjteni, és utána már nem kéne újra kísérletezni, csak kiválasztani egyet. Persze én is csinálhatok ilyet, csak gondoltam, hátha van már ilyen.
Title: Re: Színátmenetek
Post by: endi on 2017.November.19. 15:06:57
Én olyasmire gondoltam, hogy pl. egy weboldalon van többféle színátmenetes séma, hozzá a színkódok és kis négyszögekben a színek. De legalább sok ilyen színkód sorozatot érdemes lenne összegyűjteni, és utána már nem kéne újra kísérletezni, csak kiválasztani egyet. Persze én is csinálhatok ilyet, csak gondoltam, hátha van már ilyen.

ja ez hasznos lenne. más kérdés hogy mindig pont olyan kell, ami nincs a készletben.

a szürkeárnyalatos skálát nagyon várom :D
Title: Re: Színátmenetek
Post by: IstvanV on 2017.November.19. 15:36:54
Ditherelt színátmenet BASIC-ben (lassú):
[attachurl=1]
Title: Re: Színátmenetek
Post by: endi on 2017.November.19. 15:40:35
Ditherelt színátmenet BASIC-ben (lassú):
(Attachment Link)

hú ez jó. mindig is hülye voltam még az ilyen matekhoz is amivel ilyen dithert lehet csinálni :)
Title: Re: Színátmenetek
Post by: szipucsu on 2017.November.19. 16:41:14
Régebben ehhez a programhoz (https://enterpriseforever.com/programozas/basic/msg26283/#msg26283) csináltam színátmeneteket, most visszakerestem.

Fehérből világosas kékbe fokozatos átmenetek: 255,215,183,254,246,118
Fehérből-sárgából narancssárgába: 255,27,75,153,217 (nem tökéletes)
Title: Re: Színátmenetek
Post by: szipucsu on 2017.November.19. 16:52:44
Egy jó kérdés: Mind a 255 szín felírható az RBG függvénnyel? Ha igen, hogyan lehet átírni rbg alakba egy színt? Ez jó alap lehet még színátmenetek készítéséhez.
Title: Re: Színátmenetek
Post by: endi on 2017.November.19. 17:12:11
Egy jó kérdés: Mind a 255 szín felírható az RBG függvénnyel? Ha igen, hogyan lehet átírni rbg alakba egy színt? Ez jó alap lehet még színátmenetek készítéséhez.

hát némi kis bitműveletekkel vissza lehet fordítani az rgb függvényt
Title: Re: Színátmenetek
Post by: endi on 2017.November.19. 17:20:08
hú ebből tök jókat ki lehet hozni :)
Title: Re: Színátmenetek
Post by: Tomato77 on 2017.November.20. 10:47:53
Egy jó kérdés: Mind a 255 szín felírható az RBG függvénnyel? Ha igen, hogyan lehet átírni rbg alakba egy színt? Ez jó alap lehet még színátmenetek készítéséhez.

A 8 biten így oszlanak meg az RGB komponensek:

7-es bit: zöld 3
6-os bit: piros 3
5-ös bit: kék 2
4-es bit: zöld 2
3-as bit: piros 2
2-es bit: kék 1
1-es bit: zöld 1
0-ás bit: piros 1

3-3 bit jut a pirosnak és a zöldnek, 2 pedig a kéknek, így abból kevesebb árnyalat van. A legkisebb helyiértéken lévő bit jelenti a fényesebb árnyalatot, felfelé haladva pedig sötétül. Pl. a fekete és a piros között így alakul a színátmenet:

GRBGRBGR
00000000 = 0
01000000 = 64
00001000 = 8
01001000 = 72
00000001 = 1
01000001 = 65
00001001 = 9
01001001 = 73
Title: Re: Színátmenetek
Post by: szipucsu on 2017.November.20. 11:10:51
3-3 bit jut a pirosnak és a zöldnek, 2 pedig a kéknek
Ez nagyon jó!
Ez azt jelenti, hogy nem túl precíz a basic RGB függvény? Mert pl. az RGB(0,0,0) és az RGB(1,1,1) között a 0 és az 1 között végülis 9 fokozatot lehet megadni, de sokszor nincs is különbség két egymás melletti érték között? Ez már eddig is feltűnt, hogy az RGB függvény nem mindig érzékeny az értékek változtatására. Hát akkor ezért...
Title: Re: Színátmenetek
Post by: Tomato77 on 2017.November.20. 11:30:13
1/10-enként lépkedve 9 lenne, plusz a két legszélső szín, ami már 11, de "csak" 8 fokozatban állítható (a kék 4), ezért egyezik meg néhány. Talán 1/7-enként lépkedve jó lesz, az a nullával épp 8 árnyalat.
Title: Re: Színátmenetek
Post by: endi on 2017.November.20. 14:33:54
az ami nem túl precíz maga a nick harver, mivel a kéknek csak 2 bit jutott, a pirosnak 3, zöldnek 3
Title: Re: Színátmenetek
Post by: geco on 2017.November.20. 14:35:26
az ami nem túl precíz maga a nick harver, mivel a kéknek csak 2 bit jutott, a pirosnak 3, zöldnek 3
Hát még mindig jobb, mint a CPC 27 színe, meg a többiek 16-ja :D
Title: Re: Színátmenetek
Post by: szipucsu on 2017.November.20. 14:37:38
a kéknek csak 2 bit jutott, a pirosnak 3, zöldnek 3
A 21. század első évtizedeiben lassan-lassan kezdem megérteni az EP működését. :D
Title: Re: Színátmenetek
Post by: IstvanV on 2017.November.20. 17:38:47
Egész R,G,B értékek és NICK színek között konvertáló rutinok:
[attachurl=1]
Title: Re: Színátmenetek
Post by: szipucsu on 2017.November.20. 20:27:04
Egész R,G,B értékek és NICK színek között konvertáló rutinok:
Ez miket ír ki pontosan? Az I helyére be kell írni annak a színnek a kódját, amelyet át akarunk írni RGB értékre?
Title: Re: Színátmenetek
Post by: Zozosoft on 2017.November.21. 10:05:42
az ami nem túl precíz maga a nick harver, mivel a kéknek csak 2 bit jutott, a pirosnak 3, zöldnek 3
Ennek ellenére kékből van a legtöbb szín.
Title: Re: Színátmenetek
Post by: IstvanV on 2017.November.21. 13:30:06
Ez miket ír ki pontosan? Az I helyére be kell írni annak a színnek a kódját, amelyet át akarunk írni RGB értékre?

C2R: szín (0..255) -> R (0..7)
C2G: szín (0..255) -> G (0..7)
C2B: szín (0..255) -> B (0..3)

R2C: R (0..7) -> szín (0..73)
G2C: G (0..7) -> szín (0..146)
B2C: B (0..3) -> szín (0..36)
Title: Re: Színátmenetek
Post by: Povi on 2020.March.21. 18:54:37
Van valami jó kis kódrészlet, amivel szépen fokozatosan el lehet sötétíteni egy négy színű képet paletta változtatással?
pszeudókód is jó, mi lenne az a képlet, amivel a színkódot ilymódon lehet változtatni?
Title: Re: Színátmenetek
Post by: geco on 2020.March.21. 19:51:10
En csak a fix elore definialt x palettas modszert tudom.
A kepletes szerintem bonyolult, nem is tudom hogy csinalnam meg.
Title: Re: Színátmenetek
Post by: geco on 2020.March.21. 19:57:03
Van egy otletem, a szin kodjabol kiszamolni az r g b osszetevok decimalis erteket, majd mindharmat csokkenteni eggyel, ujra szinkodda alakitani, ha az egyik osszetevo elerte a 0-t azt mar nem csokkenteni, annyi, hogy a keknek csak negy kombinacioja van, megszoroznam kettovel a csokkenteshez.
Title: Re: Színátmenetek
Post by: geco on 2020.March.21. 20:25:59
Bemenet
Szinkod: a
Osszetevok ertekei
Red: c
Green: d
Blue: e
Code: [Select]
 ld hl,lpt_colors
fadeout
  ld b,04h
wait
  halt
  djnz wait
  ld b,04h
chng_col
  ld a,(hl)
  ld c,00
  ld d,c
  ld e,c
  rrca
  rl c
  rrca
  rl d
  rrca
  rl e
  rrca
  rl c
  rrca
  rl d
  rrca
  rl e
  rrca
  rl c
  rrca
  rl d
  rl e
  dec c
  jp p,reddec
  Inc c
reddec
  dec d
  jp p,grndec
  inc d
grndec
  dec e
  jp p,bludec
  inc e
bludec
  rr e
  rr d
  rla
  rr c
  rla
  rr e
  rla
  rr d
  rla
  rr c
  rla
  rr e
  rla
  rr d
  rla
  rr c
  rla
  ld (hl),a
  inc l
  djnz chng_col
  dec l
  dec l
  or (hl)
  dec l
  or (hl)
  dec l
  or (hl)
  jr nz,fadeout
Title: Re: Színátmenetek
Post by: Tomato77 on 2020.March.21. 20:49:11
Basic-ben egy ilyet dobtam össze. A PALETTE szubrutinnal kell beállítani a palettát, mert az fogja eltárolni a színek kódját. Eredetileg lassítást is akartam beletenni, de így is nagyon lassú lett. :)

Code: [Select]
100 PROGRAM "SOTET.BAS"
105 DIM R(0 TO 3),G(0 TO 3),B(0 TO 3)
110 GRAPHICS HIRES 4
120 CALL PALETTE(BLACK,WHITE,RED,GREEN)
130 FOR I=1 TO 50
140   SET INK RND(3)+1
150   PLOT RND(1280),RND(720);
160 NEXT I
170 PRINT "Nyomj meg egy billentyut!"
180 GET KEY$
190 IF KEY$="" THEN 180
200 CALL SOTET
300 !
310 DEF PALETTE(C0,C1,C2,C3)
320   NUMERIC COL(0 TO 3)
330   COL(0)=C0:COL(1)=C1:COL(2)=C2:COL(3)=C3
340   SET PALETTE C0,C1,C2,C3
350   FOR I=0 TO 3
360     LET R(I)=(COL(I) BAND 1)*4+(COL(I) BAND 8)/4+(COL(I) BAND 64)/64
370     LET G(I)=(COL(I) BAND 2)*2+(COL(I) BAND 16)/8+(COL(I) BAND 128)/128
380     LET B(I)=(COL(I) BAND 4)/2+(COL(I) BAND 32)/32
390   NEXT
400 END DEF
500 !
510 DEF SOTET
520   NUMERIC CT(0 TO 3)
530   FOR J=6 TO 0 STEP-1
540     FOR I=0 TO 3
550       LET RT=INT(R(I)*J/7)
560       LET GT=INT(G(I)*J/7)
570       LET BT=INT(B(I)*J/7)
580       LET CT(I)=(RT BAND 4)/4+(RT BAND 2)*4+(RT BAND 1)*64+(GT BAND 4)/2+(GT BAND 2)*8+(GT BAND 1)*128+(BT BAND 2)*2+(BT BAND 1)*32
590     NEXT I
600     SET PALETTE CT(0),CT(1),CT(2),CT(3)
610   NEXT J
620 END DEF

Ellenőriztem a programot, nincs benne koronavírus. :)
Title: Re: Színátmenetek
Post by: Povi on 2020.March.21. 22:05:29
Bemenet

Hú, sejtettem, h valami ilyesmi gigadolog lesz a hülye színkódolás miatt... :-)
Köszi, mindjárt ki is próbálom!
Title: Re: Színátmenetek
Post by: Povi on 2020.March.21. 22:07:29
Basic-ben egy ilyet dobtam össze. A PALETTE szubrutinnal kell beállítani a palettát, mert az fogja eltárolni a színek kódját. Eredetileg lassítást is akartam beletenni, de így is nagyon lassú lett. :)

Ellenőriztem a programot, nincs benne koronavírus. :)

Ez tök jó lett, ilyesmire gondoltam! :-)
Title: Re: Színátmenetek
Post by: Tomato77 on 2020.March.22. 10:42:29
Kicsit játszottam a programmal. 16 színű módban szebb (persze csak az alsó 8 színt használja), és előbb kiszámolja a szín összetevőket, aztán sötétít, így Basicben is egész tűrhető a sebesség.

Code: [Select]
100 PROGRAM "SOTET16.BAS"
105 DIM R(0 TO 7),G(0 TO 7),B(0 TO 7)
110 GRAPHICS HIRES 16
115 RANDOMIZE
120 CALL PALETTE(RND(16),RND(256),RND(256),RND(256),RND(256),RND(256),RND(256),RND(256))
130 FOR I=1 TO 100
140   SET INK RND(7)+1
150   PLOT RND(1280),RND(720);
160 NEXT I
170 PRINT "Nyomj meg egy billentyut!"
180 GET KEY$
190 IF KEY$="" THEN 180
200 CALL SOTET
300 !
310 DEF PALETTE(C0,C1,C2,C3,C4,C5,C6,C7)
320   NUMERIC COL(0 TO 7)
330   COL(0)=C0:COL(1)=C1:COL(2)=C2:COL(3)=C3
335   COL(4)=C4:COL(5)=C5:COL(6)=C6:COL(7)=C7
340   SET PALETTE C0,C1,C2,C3,C4,C5,C6,C7
350   FOR I=0 TO 7
360     LET R(I)=(COL(I) BAND 1)*4+(COL(I) BAND 8)/4+(COL(I) BAND 64)/64
370     LET G(I)=(COL(I) BAND 2)*2+(COL(I) BAND 16)/8+(COL(I) BAND 128)/128
380     LET B(I)=(COL(I) BAND 4)/2+(COL(I) BAND 32)/32
390   NEXT
400 END DEF
500 !
510 DEF SOTET
520   NUMERIC CT(0 TO 7,0 TO 7)
530   FOR J=6 TO 0 STEP-1
535     PRINT ".";
540     FOR I=0 TO 7
550       LET RT=INT(R(I)*J/7)
560       LET GT=INT(G(I)*J/7)
570       LET BT=INT(B(I)*J/7)
580       LET CT(J,I)=(RT BAND 4)/4+(RT BAND 2)*4+(RT BAND 1)*64+(GT BAND 4)/2+(GT BAND 2)*8+(GT BAND 1)*128+(BT BAND 2)*2+(BT BAND 1)*32
590     NEXT I
600   NEXT J
610   FOR J=6 TO 0 STEP-1
620     SET PALETTE CT(J,0),CT(J,1),CT(J,2),CT(J,3),CT(J,4),CT(J,5),CT(J,6),CT(J,7)
630   NEXT
640   PRINT
650 END DEF
Title: Re: Színátmenetek
Post by: Povi on 2020.March.22. 10:45:19
na, végül Tomato kódját kicsit módosítva felhasználtam, h táblázatot gyártsak belőle... :-)
Geco kódja azért nem annyira jó, mert nem egyenletesen csökkenti a három komponens értékét, ezért néha vad színek is megjelennek az átmenetnél.
Title: Re: Színátmenetek
Post by: geco on 2020.March.22. 11:39:13
Geco kódja azért nem annyira jó, mert nem egyenletesen csökkenti a három komponens értékét, ezért néha vad színek is megjelennek az átmenetnél.
Elméletileg egyenletesen, a kék kivételébel, de ha kihagyod a kék duplázását az elején, és a végén a felezését, akkor az összeset egyformán csökkenti.
Úgy gondoltam, hogy így lesz a jobb, de úgy látszik mégsem :D
Title: Re: Színátmenetek
Post by: Tomato77 on 2020.March.22. 12:43:06
Simán csökkenteni az értékeket szerintem azért nem teljesen jó, mert lehet, hogy az egyik összetevő elfogy, míg a másikból még marad. Pl. egy narancssárga színben kb. fele annyi zöld van, mint piros, és ha elkezdem csökkenteni, a zöld elfogy, míg a pirosból még marad és átmegy sötét pirosba.
Title: Re: Színátmenetek
Post by: Povi on 2020.March.22. 13:47:20
Simán csökkenteni az értékeket szerintem azért nem teljesen jó, mert lehet, hogy az egyik összetevő elfogy, míg a másikból még marad. Pl. egy narancssárga színben kb. fele annyi zöld van, mint piros, és ha elkezdem csökkenteni, a zöld elfogy, míg a pirosból még marad és átmegy sötét pirosba.
na erre gondoltam én is, csak nem tudtam így megfogalmazni :-)
Title: Re: Színátmenetek
Post by: szipucsu on 2021.February.25. 11:33:12
Egyszer kísérleteztem a színátmenetekkel, ezeket dobtam össze, most újra szembe jöttek. Felteszem, hátha majd valamire jó lesz.
[attach=1]
[attach=2]