سلام!

در این جلسه می خواهیم رنگ یک نقطه از صفحه را به دست بیاوریم.

رنگ پیکسل های یک صفحه به صورت یک آرایه ی دو بعدی ذخیره نمی شود بلکه در یک آرایه ی یک بعدی قرار دارند. بنابراین نقطه ای با مختصات x و y در خانه ای با شماره ی زیر قرار دارد؛

y * screen->w + x

که در این جا screen->w بیان گر طول صفحه است.

حالا می خواهیم رنگ نقطه ای که شماره ی آن را به دست آوردیم، به دست بیاوریم.

ابتدا پیکسل های صفحه را به صورت زیر ذخیره می کنیم.

(Uint32*) pixels = (Uint32*) screen->pixels;

توجه: پرانتزی که قبل از pixels و screen->pixels آمده به معنای آن است که این ها را به Uint32* تبدیل کن. Uint32* آرایه ای از متغیرهای ۳۲ بیتی است.

حالا برای به دست آوردن رنگ نقطه ی مورد نظر به صورت زیر عمل می کنیم.

(Uint8*) color = (Uint8*) &( pixels[ y * screen->w + x ] );

حالا رنگ نقطه ی مورد نظر را با فرمت RGB در یک آرایه ذخیره کرده ایم. برای به دست آوردن تک تک این مقدار ها، از این آرایه استفاده می کنیم. مقدار رنگ آبی در خانه ی اوّل، مقدار رنگ سبز در خانه ی دوم و مقدار رنگ قرمز در خانه ی سوم آرایه قرار دارد.

cout << "Red: " << (int) color[2] << "\nGreen: " << (int) color[1] << "\nBlue: " << (int) color[0] << endl;

برای تمرین، تابعی بنویسید که صفحه ی مورد نظر، x و y را بگیرد و رنگ نقطه ی مورد نظر را در قالب Color برگرداند (کلاس Color را هم خودتان بنویسید.).

موفق باشید!