Miten kaikki värit saa järjestettyä picture lootaan palettin tavoin? Jos et ymmärtänyt, tossa on esimerkki kuva asiastani:
http://koti.mbnet.fi/petrinm/Palet.jpg
HUOM: Siis RGB käskyllä!!
Mjaah, no siihen tarvitaan joku kaava, miten se osaa pistää jokaiseen pikseliin oikean värisävyn. Ensin kannattaisi kehittää sellainen, jolle syötetään "Sävy", "Kirkkaus" ja "Harmaus", ja niiden perusteella ohjelma pistäisi oikean määrän punaisesta vihreää ja sinistä. En nyt tällaista itse ihan tuosta vaan osaisi tehdä.
Toistaalta voisit yksinkertaisesti kopioida tuo paletin kuvan PictureBoxiin, kun sinulle se näkyy jo valmiina olevan.
Edit: Eikä tuossa paletissa muuten tietenkään edes näy kaikki mahdolliset värisävyt, vain murto-osa. Jos nyt yrität tehdä jotain piirto-ohjelmaa, mistä saa valita värin paletista, niin itse olen kokeillut sellaista, että kun klikkaa PictureBoxia, niin se lisää punaista, kun liikuttaa hiirtä oikealle ja vihreää kun liikuttaa alas, tjsp.
Kaikkia värejä on tosiaan aika vaikea saada ainakin 32 bittisiä. Siinä on 16777216 eri väriä ja sen neliöjuuri on 4096 eli ei mahtuisi koko näyttöön. Tai no et varmaan niin ajatellutkaan.
Mitenkä oikein laskit tuon värimäärän? Eikös se pitäisi laskea 2 potenssiin 32, joka muuten on 4294967296?
käytin vb:n functiota 'print sqr(16777216)' ja vastaukseksi tuli 4096. Ja käytä point käskyä valkoiseen kohtaan tulee luku 16777215 joka on muuten maksimi värimäärä eli rgb(255, 255, 255)
Jos olet aina halunnut nähdä kaikki värit niin tässä:
http://koti.mbnet.fi/winuus/AllColors.png (kannattaa tallentaa koneelle eka) Huomaa tiedoston pieni koko :) Kaikkeen se png pystyykin...
Tuossa kuvassa on tasan 16777216 eri väriä (256*256*256), eikä yhtään samaa. Ja tuota enempää värejä ei voi näyttääkään perinteisillä näytöillä.
Vielä kun näkyisi tuo kuva, niin olisi parempi ;).
Tälleen saa tehtyä kaikki värit.
Petrinm et varmaan tämmöstö tarkottanut.
Formilla pitää olla VScroll1,VScroll2,VScroll3 ja Picture1.
Private Sub Form_Load() VScroll1.Min = 1 VScroll2.Min = 1 VScroll3.Min = 1 VScroll1.Max = 256 VScroll2.Max = 256 VScroll3.Max = 256 End Sub Private Sub VScroll1_Change() Picture1.BackColor = RGB(VScroll1.Value, VScroll2.Value, VScroll3.Value) End Sub Private Sub VScroll2_Change() Picture1.BackColor = RGB(VScroll1.Value, VScroll2.Value, VScroll3.Value) End Sub Private Sub VScroll3_Scroll() Picture1.BackColor = RGB(VScroll1.Value, VScroll2.Value, VScroll3.Value) End Sub
Ziglii: No en oikeastaan yhtään usko, että saisi.
remontti-reiska kirjoitti:
Vielä kun näkyisi tuo kuva, niin olisi parempi ;).
Tallenna kuva kovalevyllesi ja avaa se jollain PNG:tä tukevalla kuvankäsittelyohjelmalla, älä unohda myöskään käyttää tietokonetta
Mulla oli tuohon valmis koodi jokunen vuosi sitten, mutta en löydä lähdekoodia mistään. AxtiveX:nä löytyy. Ei koodi kovin kummoinen ollut ja voisi sen uudelleenkin väsätä jos on tarpeen. Pset käskyillä tökitään påisteitä liuttaen värejä sopivasti RGB-funktiolla. Tuloksena on juuri tuo sama kuvio hiukan isompana.
T.M: Mitäs sinulla oikeastaan on minua vastaan?
ehkä T.M sanoo ajatukset niin kuin mietii eli suoraan eikä mutkiteltuna...
Tossa png-kuvassa on kaikki värit vain, jos sen zoomaa niin, että pikkuruutu on 256 pixeliä kanttiinsa. Siis 256 kpl tämmöisiä ruutuja.
Toisinsanoen, tossa on kaikki värit jos ei zoomaa yhtään :)
Mun piti zoomata ja homma söi mielettömästi koneen muistia. Piti käynnistää koko masina uudelleen. Png-kuva on kai joku vektorikuva tai jollain tapaa koodattu. Katseluohjelmalla se luodaan ruudulle.
Milläs perusteella tuo on sitten 32-bittinen, jos kerran se lasketaan 256^3 vai onko tuo nyt 24-bittinen?
Muuten jos jotain Scrollaus-palkkeja rupeatte käyttämään niin sellaisessa värinvaihdossa menee pidemmän päälle hermot. :) Siksi kehitinkin oman kätevän systeemin juuri kehittämääni grafiikkaohjelmaan. Profiilista löytyy lisätietoa, jos kiinnostaa (en kyllä tajua miksi kiinnostaisi) :)
lainaus:
Tallenna kuva kovalevyllesi ja avaa se jollain PNG:tä tukevalla kuvankäsittelyohjelmalla, älä unohda myöskään käyttää tietokonetta
Eikös niitä .png kuvia voi katsoa myös muissakin laitteissa kuin vain tietokoneessa ;). No joo, periaatteessa voisit sanoa suoraan sanottavasi eikä kierrellä ja kaarrella tuollaisella viestillä.
Huomattavan offtopiciksi meni taas kerran :).
Keksin ratkaisun asiaani, mutta miten saan muutettua point käskyn tuloksen RGB koodiks?
hunajavohveli kirjoitti:
Milläs perusteella tuo on sitten 32-bittinen, jos kerran se lasketaan 256^3 vai onko tuo nyt 24-bittinen?
Muuten jos jotain Scrollaus-palkkeja rupeatte käyttämään niin sellaisessa värinvaihdossa menee pidemmän päälle hermot. :) Siksi kehitinkin oman kätevän systeemin juuri kehittämääni grafiikkaohjelmaan. Profiilista löytyy lisätietoa, jos kiinnostaa (en kyllä tajua miksi kiinnostaisi) :)
Hmm.. niinpä :D Ainoa laskutoimitus mistä sain tulokseksi 16777216 (johon sisältyy numero 32) oli: 2^32/256 heh...
Itse olen toteuttanut värinvalinnan tällä tapaa: http://koti.mbnet.fi/winuus/inp-ima.php
Hieno, mutta muistuttaa kovin Common DialogBoxin värivalintaa eli Windowsin värivalintaa. Muuten 16777216 = 256^3 eli 24-bittinen.
setä kirjoitti:
Hieno, mutta muistuttaa kovin Common DialogBoxin värivalintaa eli Windowsin värivalintaa...
Miksi kaikki aina sanovat että: "...mutta muistuttaa windowsin värinvalintaa" :D
Aivan kuin se olisi huono asia :->
setä kirjoitti:
...Muuten 16777216 = 256^3 eli 24-bittinen.
Jep, 24 bittinen se taitaa olla (2^24), mutta miksi ihmeessä windowsin asetuksissa lukee: "True Color (32-bittinen)" vaikka se on oikeasti 24? Todella outoa.
True Color (32-bit) kunkin päävärin osuus ilmaistaan 12 bitillä eli 4096 eri voimakkuutta, kun taas VB:n RGB-funktiossa askeleita on tuo 256 eli 8 bittiä. Väripaletti on siis vieläkin hienojakoisempi, tuskin silmällä voi eroa huomata.
VScroll1.Max = 256 VScroll2.Max = 256 VScroll3.Max = 256
Muuten, RGB:ssä max arvo on 255 eikä 256!!!!
rgb = 1-256
ainakin tietääkseni
ja tällä sivulla on 4 (minun lisäkseni) sanonut että niitä on on 256
jos laskin oikein niin niitä on 4
edit: ja kaksi on sanonut että 255
RGB-arvot ovat välillä 0 - 255 eli yhteensä 256 kpl.
Niin ottakaa huomioon, että nollasta aloitetaan. Huomasinkin tuon VB:n värivajauden, kun latasin grafiikkaohjelmaani 32-bittisen kuvan, ja ennen niin sileässä väriliu'ussa näkyi selkeästi värien erot.
Erot saattaa johtua kuvan pakkauksesta. Kyse oli varmaan jpg-kuvasta. Kyllä 24-bittiseen väriin saa hyvin tasaisen liun. Mulla ei ittellä kyllä kovin tarkat nää okulaarit ole.
Olenko nyt ihan pihalla, vai miksi tuo 32 bittinen väriskaala tuntuu epätodelliselta?
Eihän näyttö osaa näyttää kuin 24 bittisiä värejä?
Eli näitä:
R: 0-255
G: 0-255
B: 0-255
256*256*256 = 16777216
Ei näin?:
R: 0-1624.498677...
G: 0-1624.498677...
B: 0-1624.498677...
1625.498677*1625.498677*1625.498677 = 4294967296
2^24 = 256*256*256 = 24 bittinen väriskaala = 16777216
2^32 = 256*256*256*256 = 32 bittinen väriskaala = 4294967296
Joku viisaampi voisi selittää tuon 32 bittisen väriskaalan... *pihalla*
setä kirjoitti:
True Color (32-bit) kunkin päävärin osuus ilmaistaan 12 bitillä eli 4096 eri voimakkuutta, kun taas VB:n RGB-funktiossa askeleita on tuo 256 eli 8 bittiä. Väripaletti on siis vieläkin hienojakoisempi, tuskin silmällä voi eroa huomata.
Siis VB:ssä RGB-funktiossa on rajana 8 bittiä/väri. Windowssin TrueColorissa on 12 bittiä/väri
Mikä syy tuhlata bittejä?
Edit:
Siis, näytön värithän koostuvat 0-255 välisistä arvoista. Miksi pitää käyttää 12 bittiä näyttämään nuo samat arvot? vaikka se onnistuisi 8 bitillä...
Siinäpä pähkinää kerrakseen :P
No eivätpähän koostu 0-255, tai eikös niitä värivoimakkuuksia voi säätää ihan mille tasolle tahansa? Värimäärä riippuu siitä, kuinka paljon noiden voimakkuuksien ero on. Mitä tiheämmäs voimakkuuksia, sitä enemmän saa väriyhdistelmiä. VB:n 24-bittisessä systeemissä tuo tiheys on asteikolla 0-255, mutta Windowsin 32-bittisessä järjestelmässä luku on siis 4096.
Ja muuten setä, kyseessä oli bmp-kuva.
Edit: Ja veikkaampa, ettei 32-bittistä suurempaa värimäärää näyttäviä koneita edes tehdä, koska jo nyt kahta mahdollisimman samankaltaista väriä (jotka eivät ole kuitenkaan samat) on mahdoton ihmissilmällä erottaa toisistaan.
Kylläpäs koostuu 0-255
Toki niitä voi säätää mille tasolla tahansa, mutta mitä siitä hyötyy jos mikään ohjelma ei osaa lukea niitä?
Siis:
2^24 = 256*256*256 = 16777216 = 24 bittinen?
2^32 = 256*256*256*256 = 4294967296 = 32 bittinen?
2^32 = 1625.498677*1625.498677*1625.498677 = 4294967296 = 32 bittinen?
2^36 = 4096*4096*4096 = 68719476736 = 36 bittinen?
Ja mikään kuvankäsittelyohjelmahan ei tallenna 32 bittisiä värejä kuviin? Syy varmaankin se ettei niitä osata lukea / kannata käyttää?? (sen takia kun niitä ei voida erottaa)
Siis, selittäkääpäs tuo 32 bittinen väriskaala tälläiselle juntille kuin minä olen.
lainaus:
Mikä syy tuhlata bittejä?
Niin, tuokin oli hieman epäselvä.
No mitä selittämistä siinä nyt on? Ihan sama periaate kuin muissakin väriskaaloissa. Mahdollisia väriasteita vain on 2^8 kertaa enemmän kuin 24-bittisessä.
Huoh... Mitä hyötyä sillä saavutetaan?
Sitäkö että bittejä voitaisiin tuhlata vain sen takia että mahdollisia väriasteita on 2^8 kertaa enemmän kuin 24-bittisessä?
Ja jos et tiennyt, näyttö ei tue ~16 miljoonaa eri värivaihtoa enempää. Vai miksen voi valita minun paintillani väriarvoa: R:1044 G:623 B:1112 ?
?? olen aina luullut että 32 bittisessä on r255 g255 b255.
Mutta tuo painthan käsittää ainakin bmp muodossa vain 24 bittiset värit.
T.M. kirjoitti:
Huoh... Mitä hyötyä sillä saavutetaan?
Sitäkö että bittejä voitaisiin tuhlata vain sen takia että mahdollisia väriasteita on 2^8 kertaa enemmän kuin 24-bittisessä?
Ja jos et tiennyt, näyttö ei tue ~16 miljoonaa eri värivaihtoa enempää. Vai miksen voi valita minun paintillani väriarvoa: R:1044 G:623 B:1112 ?
Ai miksei paintissa voi valita noin? No koska paint ei tue 32-bittisiä värejä.
Ai mitä hyötyä saavutetaan? No tietääkseni vierekkäiset 24-bittiset värit voi vielä ihmissilmä erottaa, mutta ei enää 32-bittisiä.
Edit: No enpä kyllä tiedä sitten, jos näytön asteet ulottuvat vain 16 miljoonaan, mutta 32-bittiset värit 4 miljardiin. Äääh, en nyt enää jaksa jauhaa tästä. Olen sanonut kaiken, mitä sanottavaa oli.
Mikäs ohjelma tukee 32bittisiä väriarvoja?
lainaus:
Ai mitä hyötyä saavutetaan? No tietääkseni vierekkäiset 24-bittiset värit voi vielä ihmissilmä erottaa, mutta ei enää 32-bittisiä
Osaisiko joku kertoa miksi sitten peleihin pistetään mahdollisuudeksi 64-bittiset värit 32-bittisten ja 16-bittisten lisäksi?
T.M. kirjoitti:
Mikäs ohjelma tukee 32bittisiä väriarvoja?
Ei kai sitten mikään, jos kerran 16 miljoona on maksimi.
Sä siis luulet tietäväs mitä sä tiedät luulevas? Huoh!
Kertokaa nyt joku edes kunnolla miksi 32 bittisiä värejä käytetään wintoosassa?
Gaxx kirjoitti:
lainaus:
Ai mitä hyötyä saavutetaan? No tietääkseni vierekkäiset 24-bittiset värit voi vielä ihmissilmä erottaa, mutta ei enää 32-bittisiä
Osaisiko joku kertoa miksi sitten peleihin pistetään mahdollisuudeksi 64-bittiset värit 32-bittisten ja 16-bittisten lisäksi?
Varmaan samasta syystä kun myydän äänentoistolaitteita ja mainostetaan, että "JOO ostakaa kuulkaa tällaiset, nää pystyy toistamaan 50000 Hertsiä."
Huijataan niitä, jotka eivät tajua, että ihmisen kuuloalue loppuu 15000 - 20000 Hertsiin. Sama juttu pätee varmaan noihin väreihinkin.
Miksi ihmeessä qb:n future libraryssa jos otta 32 bittisen näyttö moodin se näyttää vain r255 g255 b255.
Hö, eihän noilla saa aikaan 32-bittisiä värejä, vaan ainoastaan 24-bittiset. Tietysti future libraryn suunnittelijoille on voinut sattua erehdys.
normaalissa 32-bittisessä paletissa on mun käsitykseni mukaan 24 bittiä värejä ja loput sitten jotain ekstrainfoa, eikä värejä. huijausta.
sooda kirjoitti:
normaalissa 32-bittisessä paletissa on mun käsitykseni mukaan 24 bittiä värejä ja loput sitten jotain ekstrainfoa, eikä värejä. huijausta.
Eli siis huijareita kaikki tyynni. Mitähän seuraavaksi keksitään? Stepperi, joka pyörii 100 kilometriä tunnissa?
Jotain tämän tapaista selitystä löysin googlettamalla:
32-bittisissä väreissä on yhtä paljon värejä kuin 24-bittisissä, mutta 32-bittisiä värejä on nopeampi käyttää, koska näytönohjaimen prosessoripiiri voi kopioida dataa vain bitin monikertoina (8, 16, 32, 64 bittiä) ja 24-bittisissä väreissä joudutaan tekemään 3 8-bitin siirtoa, kun 32-bittisissä väreissä sama onnistuu yhdellä 32-bitin siirrolla.
Aivan, siitä se siis johtuu, koska 24 ei ole mikään kakkosen potenssi!
Edit: Mutta ne 64-bittiset menevät vielä vähän yli...
Jogge kirjoitti:
Jotain tämän tapaista selitystä löysin googlettamalla:
32-bittisissä väreissä on yhtä paljon värejä kuin 24-bittisissä, mutta 32-bittisiä värejä on nopeampi käyttää, koska näytönohjaimen prosessoripiiri voi kopioida dataa vain bitin monikertoina (8, 16, 32, 64 bittiä) ja 24-bittisissä väreissä joudutaan tekemään 3 8-bitin siirtoa, kun 32-bittisissä väreissä sama onnistuu yhdellä 32-bitin siirrolla.
Kiitoksia selvennyksestä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.