الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

العلاقة بين النظام الست عشري Hexadecimal و قيم الألوان RGB

مغلق
بدأه Mohammad Kamar في 3 أبريل 2007 · 0 رد · 3,217 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1

The Hexadecimal System and RGB Color Values

اعتاد الأشخاص العمل مع النظام العشري Decimal (Base 10 – سأشرح معنى Base لاحقا في درس آخر ممكن نقول عليها دلوقتي "النظام"), وده يمكن لإننا عندنا 10 صوابع.

لكن أجهزة الحاسب الآلي Computer تتعامل مع أكثر من نظام Base مختلف: زي مثلا النظام الثنائي Base 2 (Binary), والنظام الثماني Base 8 (Octal), والنظام الست عشري Base 16 (Hexadecimal) والي بيختصرو اسمه –النظام الست عشري Hexadecimal- للاسم Hex.

وسبب كون النظام الست عشري Hex مناسب جدا في التعامل مع الجهاز –يمكن لاحظنا إن الألوان مثلا في الفوتو شوب طريقة كتابتها غريبة شوية زي اللون الأزرق مثلا = 0000FF وهو دي قيمة اللون الأزرق بالقيمة الست عشرية- نرجع لموضوعنا, النظام العشري Hex مناسب جدا في التعامل مع الأجهزة لإنه بيمكنك من إنك تمثل أي قيمة ما بين الـ 0 و 255 في حرفين بس. والحرفين دول حجمهم = 1 بايت (يعني 8 بت).

تذكر, كل بت تستطيع أن تسجل فيه إما 0 أو 1 فقط, لذلك نظام تعامل الكمبيوتر مع الحروف والأرقام هو النظام الثنائي Base 2.

تذكر أيضا, قلنا أن البايت 8 بت. والبت يستطيع حمل حرفين إذا نستطيع تسجيل 16 حرف مميز (من 0 إلى 15) عن الآخر في هذا البايت. صحيح؟

زي ما النظام العشري Decimal (Base 10) يتحتوي على 10 حروف - الحروف التي نستخدمها لتمثيل القيمة- وهي من 0 إلى 9, برضه النظام الست عشري Hexadecimal (Base 16) علشان نمثل قيمته بنستخدم 16 حرف من 0 إلى 9 –وكده عشرة- والحروف من A لحد F (وكده يبقوا 16 حرف).

وقصدت في النظام العشري Decimal (أو بيختصروه إلى (Dec في حكاية قيم التمثيل اللي من 0 إلى 9 إنك تقدر تجمع بين أكثر من رقم ولإن النظام العشري آخرك فيه خالص (في حكاية الألوان) 255 فإنت تقدر تجمع أكثر من رقم من الـ 0 إلى 9 علشان تكون القيمة اللي انت عايزها.

يعني في القيمة 255 جمعنا ما بين الـ 2 والـ 5 والـ 5 مرة تانية. والأرقام 2 و 5 موجودين ضمن القائمة بتاعتنا من 0 إلى 9.

ومثال تاني. علشان نعمل القيمة 187 هنجمع ما بين القيم 1 و 8 و 7 من الجدول.

والـقيم الست عشرية Hex برضه نفس الحكاية عندنا جدول من 0 إلى 9 والحروف من A إلى F علشان نمثل القيمة بتاعتنا.

يعني اللون الأزرق علشا نكتب قيمته بالقيمة الست عشرية هنكتب 0 أربع مرات وبعدين حرفين F والـ 0 والـ F من الجدول بتاعنا. صح؟ يبقى اللون الأزرق = 0000FF.

فهمنا يعني إيه كلمة Base والرقم بعديها.

وفهمنا يعني إيه القيم اللي بنستخدمها في التمثيل.

لما نقول النظام ده Base 2 معناه إن النظام ده طريقة تمثيل القيمة فيه باستخدام حرفين ومش معنى كده إن طول قيمته حرفين لأ. التمثيل فيه بيبقى باستخدام حرفين بس.

خرجنا عن الموضوع شوية.

أنظر الجدول هذا, واحفظه جيدا لأنه مهم جدا. والجدول ده يبين بعض قيم التمثيل في النظام العشري Dec والمقابل ليها في النظام الست عشري Hex:

hexadecimalconstantsch6.gif

طب وإيه شرح الجدول ده؟

القيم في النظام العشري اللي ما بين الـ 0 وال 9 لما نيجي نحولها للنظام الست عشري هتبقى زي ما هي.

ومن الـ 10 لحد الـ 15 المقابل ليهم من الـ A لحد الـ F. يعني مثلا لو قلتلك حول لي القيمة العشرية 14 للقيمة الست عشرية هتقوللي النتيجة E.

خللي بالك: القيم العشرية الموجودة مش قيم الجدول اللي قولنا عليهم اللي بنسمي النظام بسببهم Base 10.

لكن الصورة أو الجدول اللي فات بيبين القيم اللي بنستخدمها للتمثيل في النظام الست عشري )القيم الـ 16 واللي عشانها سمينا النظام ده ست عشري وسميناه برضه Base 16) والمقابل ليها لما نحولها في للقيمة العشرية أو العكس القيم العشرية والمقابل ليها لما نحولها للقيم الست عشرية.

فهمنا الجدول كويس.

ندخل على الخطوة اللي بعد كده.

كل لون RGB (معنى RGB إن اللون ده ممزوج من 3 ألوان Red و Green و Blue وكل لون له قيمة عشرية معينة ما بين الـ 0 والـ 255) نقدر نمثل قيمه العشرية RGB الثلاثة –زي ما قلنا- بالقيمة الست عشرية ما بين 00 و FF.

هنا بتظهر أسئلة كتير –وده بداية الجزء الثاني أهم جزء في الدرس هو والجزء الأول اللي فات ده كله-: إزاي نحول بين النظام العشري الي احنا متعودين عليه للنظام الست عشري؟ يعني نعمل إيه لما نيجي في الفوتو شوب أو في كود الـ HTML ونيجي نكتب قيمة اللون؟ هل هنسجل في ملف مثلا قيم أهم الألوان أو الألوان المشهورة جدا وبعدين ننسخها؟ طب ولو عندنا قيمة عشرية إزاي نعرف تركيبها؟ يعني إزاي مثلا لو عندنا قيمة زي 0000FF نعرف إنها للون الأزرق؟ أو نعرفها تحويلها للـ RGB إزاي؟

إجابة الأسئلة دي كلها في طريقتين: التحويل بين النظام العشري Decimal والنظام الست عشري Hexadecimal.

مش هكون متساهل معاكم. مش بعد ده كله هأقوللكم تستخدموا برنامج معين أو تستخدموا الدوال Dec و Hex في الـ Visual Basic علشان نحول بين القيمتين.

لأ, لازم نبقى عارفين الطريقة اليدوية والطريقة اللي بتعملها الدوال Hex و Dec وبعد كده ممكن نكتب كود أقوى من الدول دي كلها. كود بيقى من تأليفنا إحنا.

التحويل من القيمة العشرية إلى القيمة الست عشرية:

نفترض مثلا إن عندنا القيمة العشرية 255 وعايزين نحولها إلى قيمة ست عشرية.

1. أولا: نبص في الجدول, لو عندنا القيمة العشرية في الجدول يبقى احنا كده حولناها. لو مش موجودة يبقى تدخل على الخطوة الثانية.

طبعا القيمة 255 مش موجودة في الجدول. الموجود بس من 0 إلى 15, يبقى هنعمل عمليتين بساط جدا.

2. هنقسم الـ 255 على 16 وناخد الرقم الصحيح ونحط المناظر ليه في القيم الست عشرية على الشمال والباقي من القسمة هنحط المناظر ليه على اليمين.

ببساطة أكثر 255 ÷ 16 = 15 و 15 = F. يبقى الناتج: F

والباقي من القسمة هو 15 و 15 = F. هنحطها على يمين الناتج الأول تبقى النتيجة كاملة FF وهي دي القيمة الست عشرية للقيمة العشرية 255.

طب وعرفنا منين إن الباقي هو 15.

ببساطة ضربنا الـــناتج من الحسبة 255 ÷ 16 اللي هو 15 × 16 وكانت النتيجة 240 وطرحنا 255 من 240 علشان تبقى النتيجة 15 وهو ده باقي القسمة.

على فكرة ممكن تستخدم آلة حاسبة في الموضوع ده.

وعلى فكرة أيضا الخطوات دي كلها ما ينفعش تتعمل غير في قيم الألوان بمعنى آخر أي قيمة ما بين الـــــ 0 والـــ 255.

مثال تاني:

القيمة العشرية 175 عايزين نحولها لنظيرتها الست عشرية.

نقسم القيمة العشرية على 16.

175 ÷ 16 = 10

و 10 = A

تبقى القيمة العشرية A

ولسه ما خلصناش

10 × 16 = 160

175 - 160 = 15

و 15 = F

تبقى القيمة العشرية AF

مثال ثالث:

القيمة العشرية 160 عايزين نحولها لنظيرتها الست عشرية

160 ÷ 16 = 10

و 10 = A

تبقى القيمة العشرية A

و 10 × 16 = 160

طب هنا فيه مشكلة

وهي إن مافيش باقي من القسمة يعني الباقي 0

هنضيف الصفر برضه!

تبقى القيمة العشرية A0

مش هنقول A وده علشان زي ما قلنا في الأول القيمة العشرية تتميز بإنها تقدر تمثل أي قيمة بين الـــ 0 والـ 255 في حرفين فقط مش أقل ولا أزيد.

يعني القيمة العشرية 0 عايزين نحولها للقيمة الست عشرية مش هنقول 0. هنقول 00.

التحويل من القيمة الست عشرية إلى القيمة العشرية:

نفترض مثلا إن عندنا القيمة الست عشرية FF وعايزين نحولها إلى قيمة عشرية.

1. أولا: نبص في الجدول, لو عندنا القيمة الست عشرية في الجدول يبقى احنا كده حولناها. لو مش موجودة يبقى تدخل على الخطوة الثانية.

طبعا القيمة 255 مش موجودة في الجدول. الموجود بس من 0 إلى 15, يبقى هنعمل عمليتين بساط جدا.

2. ناخد أول حرف على الشمال وهو F في مثالنا ده ونحوله إلى قيمته العشرية في الجدول نلاقيه 15.

3. نضرب 15 × 16 = 240

4. ناخد تاني حرف وهو الـ F برضه ونحوله لقيمته العشرية في الجدول نلاقيه 15.

5. نجمع 240 + 15 = 255

سهلة مش كده!!!!!

مثال تاني:

القيمة الست عشرية AF عايزين نحولها لنظيرتها العشرية.

ناخد أول حرف على الشمال وهو A و A = 10

نضرب 10 × 16 = 160

ناخد تاني حرف وهو F و F = 15

نجمع 160 + 15 = 175

بيقى القيمة العشرية للقيمة الست عشرية AF هي 175

مثال ثالث:

القيمة الست عشرية A0 عايزين نحولها لنظيرتها العشرية.

ناخد أول حرف على الشمال وهو A و A = 10

نضرب 10 × 16 = 160

ناخد تاني حرف وهو 0

نجمع 160 + 0 = 160

بيقى القيمة العشرية للقيمة الست عشرية A0 هي 160

العلاقة بين عمليتين التحويل:

لو حد لاحظ زيي إن العمليتين عكس بعض تماما وممكن نستنتج العملية الأولى من الثانية والعكس صحيح.

يعني مثلا في الأول قسمنا على 16 والناتج حطيناه على الشمال

والثانية ضربنا أول حرف على الشمال في 16 مع ملاحظة إن هو ده الحرف اللي حطيناه على الشمال في الأولى

في الأولى جبنا باقي القسمة وحطيناه على اليمين

في الثانية جبنا الرقم اللي على اليمين اللي كان باقي القسمة وضفناه على الحرف الأول وده عكس الأولى تماما

تحويل قيم اللون RGB العشرية لقيمتها الست عشرية:

هيعتمد الجزء ده من الدرس على الأمثلة.

عندنا مثالنا المعروف من الأول اللون الأزرق واللي قيم الــ RGB بتاعته R:0 G:0 B:255 – طبعا مفهومة القيم دي.

ناخد كل قيمة من الثلاثة على الترتيب ونحولها.

0 الأولى طبعا موجودة في الجدول يبقى هتبقى زي ما هي.

القيمة النهائية: 00

0 الثانية طبعا موجودة في الجدول يبقى هتبقى زي ما هي وهنضيفها على يمين الأولى.

القيمة النهائية: 0000

255 الأخيرة مش موجودة في الجدول فهنحولها بطريقتنا (هأحولها من غير شرح طبعا) ونضيفها على اليمين برضه.

255 ÷ 16 = 15 = F

15 × 16 = 240

255 – 240 = 15 = F

255 = FF

القيمة النهائية: 0000FF.

مثال آخر: اللون الأصفر واللي قيمه R:255 G:255 B:0.

ناخد كل قيمة بالترتيب.

255 طبعا تساوي FF ودي طبعا انت لازم تحفظها.

القيمة النهائية: FF.

255 الثانية تساوي FF.

القيمة النهائية: FFFF.

0 الثالثة = 00

القيمة النهائية: FFFF00.

تحويل قيمة اللون الست عشرية للقيم RGB:

المثال الأول: اللون الأزرق: 0000FF

طبعا لإننا عارفين إن القيمة العشرية للألوان متكونة من ثلاثة أجزاء كل جزء حرفين.

يبقى هناخد حرفين حرفين من الشمال لليمين بالترتيب.

00 الأولى واللي بتمثل اللون الأحمر= 0 بالقيمة العشرية.

00 الثانية واللي بتمثل اللون الأخضر= 0 بالقيمة العشرية.

FF الثالثة واللي بتمثل اللون الأزرق= 255 بالقيمة العشرية.

وده لإن F = 15

15 × 16 = 240

و F الثانية = 15

240 + 15 = 255

إذا القيم RGB = R:0 G:0 B:255

المثال الثاني: اللون الأصفر: FFFF00

ناخد رقمين رقمين من الشمال لليمين

FF الأولى = 255 ودي قيمة اللون الأحمر.

FF الثانية = 255 ودي قيمة اللون الأخضر.

00 الثالثة = 0 ودي قيمة اللون الأزرق.

إذا القيم RGB = R:255 G:255 B:0

طرق أخرى للتحويل

1. أول طريقة للتحويل هي استخدام الآلة الحاسبة Calculator الخاصة بالكمبيوتر.

وطريقة الاستخدام هي أولا إنك تغير نظام الآلة الحاسبة إلى النظام "علمي" من قائمة View ثم اختيار Scientific.

calculatorce1.gif

هتلاقي اختيارات وهي Hex و Dec و Oct و Bin وهي الخاصة بالأنظمة -على الترتيب- Hexadecimal و Decimal و Octal و Binary.

ممكن تكتب القيمة اللي انت عاوزها وانت محدد مثلا Dec وتضغط Hex علشان يحولهالك لنظيرتها الست عشرية.

أو العكس تكتب القيمة العشرية وانت محدد Hex وبعدين تضغط على Dec علشان يحولهالك للقيمة الست عشرية.

وممكن تستخدم الطريقة دي مع الاختيارات الباقية للتحويل من وإلى النظام الثنائي Binary باستخدام الاختيار Bin أو النظام الثماني Octal باستخدام الاختيار Oct.

2. الطريقة التانية للتحويل هي استخدام كود فيجوال بيسك باستخدام الدالتي Hex و Dec وتستخدم القيمة العشرية المراد تحويلها مع الدالة Hex كمدخلات والقيمة الست عشرية مع الدالة Dec كمدخلات. وهترجع لك الدالة Hex القيمة الست عشرية للمدخلات والدالة Dec القيمة العشرية للمدخلات.

كده الدرس خلص.

على فكره اللي عاوز أكواد كاملة أو برامج عملتها خاصة بالموضوع ده (التحويلات) أو هو عنده فكرة جديدة أو عمل حاجة خاصة برضه بالموضوع ده يا ريت يراسلني على إيميلي: AlMosamemSystemsCorp@Hotmail.com

مع تحياتي

Mohammad Kamar

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…