কম্পিউটার টিউটোরিয়াল

C প্রোগ্রাম: RGB কালার মডেলকে HSV কালার মডেলে রূপান্তর করা

RGB কালার রেঞ্জ ইন্টিজার রূপে দেওয়া থাকলে; টাস্ক হলো RGB কালার রেঞ্জকে কনভার্ট করে উপযুক্ত HSV কালার বের করা।

RGB কালার মডেল কী?

RGB কালার মডেল তিনটি রঙে গঠিত: লাল (Red), সবুজ (Green) এবং নীল (Blue)। RGB মডেল একটি কালার মডেল যা ডিসপ্লে টেকনোলজিতে ব্যাপকভাবে ব্যবহৃত হয়; এটি একটি অ্যাডিটিভ মডেল যেখানে এই তিনটি রঙকে ভিন্ন ইন্টেনসিটিতে যোগ করে ডিসপ্লে ডিভাইসে মিলিয়ন মিলিয়ন রঙ তৈরি করা হয়।

HSV কালার মডেল কী?

HSV কালার মডেল تشکیل হয় হিউ (Hue), স্যাচুরেশন (Saturation), ভ্যালু (Value) — যাকে HSB (Hue, Saturation, Brightness) ও বলা হয়। HSV হলো RGB কালার মডেলের একটি বিকল্প রিপ্রেজেন্টেশন। এটি মানব দৃষ্টি কীভাবে রঙ অনুভব করে সেটির সাথে সন্নিবেশ করা হয়েছে। এই কালার মডেল আর্টিস্টরা অধিক ব্যবহার করেন কারণ এর প্রাকৃতিক রঙ স্কিম। HSV-এর তিনটি অ্যাট্রিবিউট অ্যাডিটিভ এবং সাবট্র্যাক্টিভ দুটি হতে পারে।

প্রোগ্রামে আমাদের কী করতে হবে

ইউজার থেকে RGB মডেলের মান ইনপুট নিয়ে তারপর গাণিতিকভাবে HSV কালার মডেলে আউটপুট ক্যালকুলেট করতে হবে।

উদাহরণ

ইনপুট: r = 31, g = 52, b = 29 আউটপুট: h s v = (114.782608, 44.230770, 20.392157)
ইনপুট: r = 129, g = 88, b = 47 আউটপুট: h s v=(30.000000, 63.565895, 50.588238)

দেওয়া সমস্যা সমাধানের জন্য আমরা যে পদ্ধতি ব্যবহার করব −

  • ৩টি রঙ Red(r), Green(g) এবং Blue(b)-এ ইনপুট নেওয়া।
  • সব কালার ভ্যালুকে ২৫৫ দিয়ে ভাগ করা।
  • এখন cmax, cmin এবং ডিফারেন্স ক্যালকুলেট করা।
  • চেক করুন −
    • যদি cmax এবং cmin ০-এর সমান হয়, তবে Hue বা h হবে ০।
    • যদি cmax Red(r)-এর সমান হয় তবে Hue(h) = (60 * ((g – b) / diff) + 360) % 360।
    • যদি cmax Green(g)-এর সমান হয় তবে Hue(h) = (60 * ((b – r) / diff) + 120) % 360।
    • যদি cmax Blue(b)-এর সমান হয় তবে Hue(h) = (60 * ((r – g) / diff) + 240) % 360।
  • স্যাচুরেশন বের করতে চেক করুন −
    • যদি cmax = 0 হয় তবে Saturation (s) = 0।
    • যদি cmax শূন্য নয় তবে Saturation (s) = (diff/cmax)*100
  • Value কম্পিউটেশন −
    • Value (v) = cmax * 100

অ্যালগরিদম

Start
ধাপ ১ → function float max(float a, float b, float c) এ
  Return (a > b)? (a > c ? a : c) : (b > c ? b : c)
ধাপ ২ → function float min(float a, float b, float c) এ
  Return (a < b)? (a < c ? a : c) : (b < c ? b : c)
ধাপ ৩ → function int rgb_to_hsv(float r, float g, float b) এ
  float h, s, v ডিক্লেয়ার
  r = r / 255.0 সেট
  g = g / 255.0 সেট
  b = b / 255.0 সেট
  cmax = max(r, g, b) সেট
  cmin = min(r, g, b) সেট
  diff = cmax-cmin সেট
  If cmax == cmin then,
    h = 0 সেট
  End if
  Else if cmax == r then,
    h = fmod((60 * ((g - b) / diff) + 360), 360.0) সেট
  End Else if
  Else if cmax == g then,
    h = fmod((60 * ((b - r) / diff) + 120), 360.0) সেট
  End Else if
  Else if cmax == b then,
    h = fmod((60 * ((r - g) / diff) + 240), 360.0) সেট
  End Else if
  If cmax == 0 then,
    s = 0 সেট
  End if
  Else
    s = (diff / cmax) * 100 সেট
  End Else
  v = cmax * 100;
  Print h, s, v
  ধাপ ৪ → int main(int argc, char const *argv[]) এ
    r = 45, g = 215, b = 0 ডিক্লেয়ার ও ইনিশিয়ালাইজ
    rgb_to_hsv(r, g, b) ফাংশন কল
Stop

উদাহরণ

#include <stdio.h>
#include <math.h>
float max(float a, float b, float c) {
    return ((a > b)? (a > c ? a : c) : (b > c ? b : c));
}
float min(float a, float b, float c) {
    return ((a < b)? (a < c ? a : c) : (b < c ? b : c));
}
int rgb_to_hsv(float r, float g, float b) {
    // R, G, B ভ্যালু ২৫৫ দিয়ে ভাগ করে
    // রেঞ্জ 0..255 থেকে 0..1-এ পরিবর্তন:
    float h, s, v;
    r /= 255.0;
    g /= 255.0;
    b /= 255.0;
    float cmax = max(r, g, b); // r, g, b-এর সর্বোচ্চ
    float cmin = min(r, g, b); // r, g, b-এর সর্বনিম্ন
    float diff = cmax-cmin; // cmax এবং cmin-এর ডিফারেন্স
    if (cmax == cmin)
        h = 0;
    else if (cmax == r)
        h = fmod((60 * ((g - b) / diff) + 360), 360.0);
    else if (cmax == g)
        h = fmod((60 * ((b - r) / diff) + 120), 360.0);
    else if (cmax == b)
        h = fmod((60 * ((r - g) / diff) + 240), 360.0);
    // যদি cmax শূন্য হয়
    if (cmax == 0)
        s = 0;
    else
        s = (diff / cmax) * 100;
    // v কম্পিউট
    v = cmax * 100;
    printf("h s v=(%f, %f, %f)\n", h, s, v );
    return 0;
}
// main ফাংশন
int main(int argc, char const *argv[]) {
    int r = 45, g = 215, b = 0;
    rgb_to_hsv(r, g, b);
    return 0;
}

আউটপুট

h s v=(107.441864, 100.000000, 84.313728)

  1. উইন্ডোজ ১০-এ টাস্কবার রঙ পরিবর্তন করা যাচ্ছে না? সমাধান জানুন

  2. স্যামসাং কীবোর্ডের রঙ পরিবর্তন করার ৪ উপায়

  3. উইন্ডোজ ১০-এ টাস্কবার কালার পরিবর্তন: ধাপে ধাপ গাইড

  4. Windows 11 টাস্কবারের রঙ সহজে কাস্টমাইজ করুন: ধাপে ধাপে গাইড