Diskuze: kontrola barev
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Převést do binární soustavy, dostaneš tříbytový číslo - 1. byte je
červená, 2. byte zelená, 3. byte modrá. Jednotlivý byty převedeš zpátky
do desítkový soustavy a máš rgb hodnoty. Doporučuju napsat si na to funkci,
asi tak aby vracela pointer na tříprvkový pole, a v každym prvku bude jedna
složka ...nebo udělat to pole globální a napsat proceduru která ty hodnoty
uloží do něj abys nemusel to pole dělat dynamicky
Nevim jestli C/C++ má na to něco ve standardních knihovnách, můžeš zkusit vygooglit. Já si na tohle píšu funkce sám podle potřeby. Pokud nevíš jak se převádí mezi soustavama tak se to nauč, pak napsat takovou funkci by neměl bejt zásadní problém. Popřípadě někde na netu najdi tu funkci napsanou od někoho jinýho.
Napad mě ještě jeden, asi daleko jednodušší způsob.
(getpixel(bitmap,x,y) & 0xFF0000) >> 16 - červená
(getpixel(bitmap,x,y) & 0x00FF00) >> 8 - zelená
(getpixel(bitmap,x,y) & 0x0000FF) - modrá
Hlavně nevolat funkci getpixel()
3× za sebou kvůli jednomu
bodu.
Možná by bylo vhodnější použít nějakou strukturu a přímo adresovat konkrétní byte.
To byl jenom přiklad jak z tý hodnoty dostat barvu. Pro praktycký účely bych asi udělal proměnnou, do ní uložil tu barvu (int color = getpixel(...)) a dál pracoval s ní. Nebo jak říkáš přes nějakej pointer adresovat konkrérní byte, ale pokud nutně nepotřebuješ aby to bylo maximálně rychlý, tak je to imho zbytečný přidělávání práce.
Co znamená to
>> 16 - červená
?
To znamená, že se to musí posunout o 16 bitů doprava.
Zobrazeno 12 zpráv z 12.