PDA

View Full Version : تجزیه رنگ



Mask
جمعه 09 مرداد 1388, 20:59 عصر
با سلام به همه دوستان عزیز
اگه درست گفته باشم ما 4 تا رنگ اصلی داریم 1- قرمر 2-آبی 3-سبز 4-زرد
من می خام بدونم با چه کد یا تابعی میتونم یک رنگ رو بدم به برنامه و برنامه این رنگ رو تجزیه کنه و مثلا بگه:
27درصد قرمز 23درصد آبی 54 درصد سبز 46 درصد زرد
ممنون از دوستان اگه راهنماییم کنند.

Felony
جمعه 09 مرداد 1388, 21:45 عصر
3 تا رنگ اصلی داریم ( قرمز ، سبز ، آبی ) ، ( RGB ) که شما میتونید با توابع زیر رنگتون رو تجزیه کنید :


GetRValue(Color);
GetGValue(Color);
GetBValue(Color);

اولی رنگ قرمز رو از آرگومان ورودی در میاره ، دومی رنگ سبز و سومی رنگ آبی .

tdkhakpur
جمعه 09 مرداد 1388, 23:31 عصر
سلام
برای گرفتن درصد هم به روش زیر عمل کنید


value : real;
value := GetRValue(Color)*100/255;

value مقدار درصد شماست.

Mask
یک شنبه 11 مرداد 1388, 01:08 صبح
سلام
ممنون از دوستان
من یه نمونه از برنامه ای که دوستان گفتند تهیه کردم
اما یه مشکل
چرا جمع درصدها که باید بشه 100 گاهی رنگها کمتر از 100 میشه گاهی بیشتر از 100 در صورتی که درصد یعنی جمع اعداد برابر با 100 باید باشه.
ممنون از دوستان.

p_ooya
یک شنبه 11 مرداد 1388, 02:34 صبح
3 تا رنگ اصلی داریم ( قرمز ، سبز ، آبی ) ، ( RGB ) که شما میتونید با توابع زیر رنگتون رو تجزیه کنید :


GetRValue(Color);
GetGValue(Color);
GetBValue(Color);اولی رنگ قرمز رو از آرگومان ورودی در میاره ، دومی رنگ سبز و سومی رنگ آبی .
همه می دونیم که از ترکیب رنگ آبی و زرد رنگ سبز به وجود میاد (یاد نقاشی های دوران کودکی به خیر، خورشید زرد در آسمان آبی و رنگِ سبز ِ حاصل از بی دقتی!). پس چطور سبز رنگ اصلیه در حالی که خودش از ترکیب دو رنگ دیگه حاصل میشه؟
پاسخ :
ما سه رنگ اصلی داریم و سه نور اصلی. سه نور اصلی عبارتند از سبز و آبی و قرمز یا همون RGB. سه رنگ اصلی عبارتند از فیروزه ای (Cyan)، ارغوانی (Magenta) و زرد (Yellow) که میشه CMY (در ادامه راجع به K هم توضیح میدم). از ترکیب سه نور اصلی نور سفید حاصل میشه. مثل پیکسل های تلوزیون ها که اگه از فاصله خیلی نزدیک بهشون دقت کنید می بینید که در جایی از تصویر که نور سفیده، هر سه نور در پیکسل روشن هستند. از ترکیب سه رنگ اصلی رنگ سیاه حاصل میشه. حالا کم کم میرسیم به قسمت های شیرین ماجرا :کف: . از ترکیب هر یک از دو نور اصلی یک رنگ اصلی ایجاد میشه وبلعکس (البته کلمه ایجاد شاید کلمه مناسبی نباشه) :
http://www.diycalculator.com/imgs/console-09c.gif
چطور اجسام رو رنگی میبینیم : همونطور که گفتم، از ترکیب سه رنگ اصلی سیاه بدست میاد. از طرف دیگه این مطلب رو داریم که هر رنگ یکی از نورهای اصلی رو به خودش جذب میکنه. در نتیجه جسمی که همه رنگ ها مساوی داره، وقتی نور سفید (ترکیب مساوی سه نور اصلی) بهش میتابه سیاه دیده میشه (هر رنگ یکی از نورها رو جذب میکنه). همینطور جسمی که هیچ رنگی نداره هرسه نور رو بازتاب میکنه و ترکیب سه نور هم میشه سفید. شیء که فیروزه ای رنگه، در مقابل نور سفید، قرمز رو جذب و آبی و سبز رو بازتاب میکنه و در نتیجه فیروزه ای به نظر میاد :
http://scifiles.larc.nasa.gov/text/kids/Problem_Board/problems/light/images/color_cyan.gif
جسمی که قرمزه، در واقع داره نور های سبز و آبی رو جذب میکنه و در نتیجه قرمز به نظر میرسه :
http://scifiles.larc.nasa.gov/text/kids/Problem_Board/problems/light/images/color_red.gif
و الی آخر.
اما راجع به K در سیستم CMYK هم باید بدونید که K مخفف Black :متعجب: هست. از B استفاده نمیشه چون ممکنه با Blue اشتباه گرفته بشه. برای پرینت یه عکس پرینتر از مود سه رنگ CMY استفاده میکنه اما برای مشکی در حالیکه میتونه از ترکیب سه رنگ استفاده کنه، به منظور صرفه جویی در مصرف رنگ از رنگ سیاه جدا استاده می کنه که نتیجه اش میشه CMYK. امیدوارم موفق شده باشم این سوءتفاهم رو رفع کنم.

ببخشید به خاطر اینکه Off topic شد اما باید این اشتباه بسیار متداول اصلاح بشه (حتی اگه ساعت 3 صبح باشه)

Felony
یک شنبه 11 مرداد 1388, 05:45 صبح
سلام
ممنون از دوستان
من یه نمونه از برنامه ای که دوستان گفتند تهیه کردم
اما یه مشکل
چرا جمع درصدها که باید بشه 100 گاهی رنگها کمتر از 100 میشه گاهی بیشتر از 100 در صورتی که درصد یعنی جمع اعداد برابر با 100 باید باشه.
ممنون از دوستان.

جمع درصد ها نباید همیشه 100 بشه ، وقتی رنگ سفید باشه جمع درصد ها 100 و اگر مشکی باشه جمع درصد ها 0 میشه و اگر رنگ دیگری باشه بین 0 تا 100 .

در ضمن برنامه ی شما به این خاطر مشکل داره که تقدم عملگرها رو رعایت نکردین و برنامه نمیتونه درست درصد بگیره و اینکه شما وقتی 3 تا درصد رو که جدا از هم به دست آوردین با هم جمع میکنین چه طور توقع دارین که جمعشون بیشتر از 100 نشه ؟ ( باید حاصل به دست اومده رو تقسیم بر 3 کنید ) .


var
value : real;
temp:Extended;
begin
value := (GetRValue(Shape1.Brush.Color)*100) / 255;
Edit1.Text:=FloatToStr(value);
value := (GetgValue(Shape1.Brush.Color)*100) / 255;
Edit2.Text:=FloatToStr(value);
value := (GetbValue(Shape1.Brush.Color)*100) / 255;
Edit3.Text:=FloatToStr(value);
temp:=(StrToFloat(Edit1.Text)+StrToFloat(Edit2.Tex t)+StrToFloat(Edit3.Text)) / 3;
temp:=Round(temp);
Edit4.Text:=FloatToStr(temp);
end;

Mask
دوشنبه 12 مرداد 1388, 01:34 صبح
چیکار باید کرد که جمع رنگها به 100 درصد ختم بشه؟

Felony
دوشنبه 12 مرداد 1388, 05:28 صبح
چیکار باید کرد که جمع رنگها به 100 درصد ختم بشه؟
:متعجب:من کل پست قبلیم راجع به همین موضوع بود ، اون کدی که براتون گزاشتم در پست قبل رو ببینید .