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

تقسيم درجات اللون الأحمر والأخضر والأزرق من صفر إلى 25000

بدأه هدف الشمالي في 19 سبتمبر 2010 · 28 رد · 4,868 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

الإخوة الفضلاء أحتاج تقسيم درجات اللون الأحمر والأخضر والأزرق (RGB) من صفر إلى 25500 بدلاً من 0 إلى 255

فهل هناك طريقة لذلك ؟؟

تم تعديل هذه المشاركة بواسطة هدف الشمالي في 19 سبتمبر 2010 في 13:19

#2

انت تعرف ان كل لون هو من 0 الى 255

يعني RGB = 255,255,255

الرقم الاول يمثل الاحمر Red

و الثاني الاخضر Green

و الثالث الازرق Blue

فصراحة لم افهم سؤالك

هل من الممكن توضيحه

شكرا

#3

ليه من 0 الى 25500 بالذات ؟؟

طب ما تقسمها بنظام السادس عشر؟؟

بتكون افضل

وهذا التقسيم معروف جدا

او انك تقسمها الى

احمر من 0 -255

اخضر من 0 -255

ازرق من 0 - 255

هذه هى طرق التقسيم

حتى الفوتوشوب يقوم بهذا التقسيم

post-217802-099610300 1284907196_thumb.p

المرفقات
colors.png

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 19 سبتمبر 2010 في 17:40

Software Developer
Mahmoudkelany.com


 

#4
.S.T.A.L.K.E.R كتب:

انت تعرف ان كل لون هو من 0 الى 255

يعني RGB = 255,255,255

الرقم الاول يمثل الاحمر Red

و الثاني الاخضر Green

و الثالث الازرق Blue

فصراحة لم افهم سؤالك

هل من الممكن توضيحه

شكرا

ياأخي أنا أريد تكون أعلى قيمة لكل لون من الأحمر والأزرق والأخضر أكثر من 255

#5
هدف الشمالي كتب:

ياأخي أنا أريد تكون أعلى قيمة لكل لون من الأحمر والأزرق والأخضر أكثر من 255

الوضع القياسي انه يتم تمثيل الالوان ب 24 بت (لكل لون 8 بت)

حيث يتم تمثيل الالوان من 0 الى 255 و بذلك يكون عدد الالوان المتوفرة لديك هي 16,777,216 لون (2562)

----

ارجو توضيح امكانية حدوث تمثيل الالوان اكثر من 256 او ماهي الحالة التي تتحدث عنها ؟

يوجد قيم اكبر و هي 32 بت حيث تم اضافة 8 بت الى المعادلة لتوضيح بيانات الا الوان مثل alpha, Z او bump data

لكن تبقي ال 24 بت يتم تمثيلها ب 3 الوان كما في السابق من 0 - 255

بصراحة لم اتعامل معها

لكن للمزيد اقرأ هنا Color depth

تحياتي

تم تعديل هذه المشاركة بواسطة .S.T.A.L.K.E.R في 20 سبتمبر 2010 في 12:06

#6
Mahmoud Kelany كتب:

ليه من 0 الى 25500 بالذات ؟؟

طب ما تقسمها بنظام السادس عشر؟؟

بتكون افضل

وهذا التقسيم معروف جدا

او انك تقسمها الى

احمر من 0 -255

اخضر من 0 -255

ازرق من 0 - 255

هذه هى طرق التقسيم

حتى الفوتوشوب يقوم بهذا التقسيم

post-217802-099610300 1284907196_thumb.p

أخ محمود أنا أحتاج هذا التقسيم حاجة كبيرة ,

أما سؤالك لماذا لاأقسمها بنظام السادس عشر ؟

فأنا الحقيقة لاأعرف وهذا الكود أرجو منك تحويله للنظام السادس عشري :

 private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {
      JFileChooser fileChooser11 = new JFileChooser();


      fileChooser11.setLocale(Locale.UK);
      int retval = fileChooser11.showSaveDialog(ml2.this);


      if (retval == 0) {
       ur = (String.valueOf(fileChooser11.getSelectedFile()));

        InputStream is;
        try {
            is = new BufferedInputStream(new FileInputStream(ur));
            BufferedImage image;
        try {
            image = ImageIO.read(is);


    int w = image.getWidth();
    int h = image.getHeight();


        int pixel = image.getRGB(w/2, h/2);
        int red = (pixel & 0x00ff0000) >> 16;
        int green = (pixel & 0x0000ff00) >> 8;
        int blue = (pixel & 0x000000ff);
      System.out.println(red);
       System.out.println(green);
      System.out.println(blue);
        } catch (IOException ex) {
            Logger.getLogger(ml2.class.getName()).log(Level.SEVERE, null, ex);
        }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ml2.class.getName()).log(Level.SEVERE, null, ex);
        }

      }
    }
1 −1
#7

دعني اوضحلك ان هذا الرقم 0x00ff0000

هو عبارة عن RGBA

(0,255,0,0)

حيث الخانة الاولى تمثل مقدار الشفافية ALPHA

تم تعديل هذه المشاركة بواسطة .S.T.A.L.K.E.R في 20 سبتمبر 2010 في 12:15

#8

يا أخي..

فكر في الألوان كدائره...

الدائه يتم تقسيمها إلى 255 جزء......

لذا أعلى لون في العالم هو اللون الموجود على الجزء رقم 255 ....

#9

لنفترض ياإخوان أني أريد أزيد اللون الأزرق في صورة ما , وكانت درجته 19 ,الحل الموجود هو أن أزيد واحد أو أكثر , يعني

بعد 19 هو 20

وأنا أريد أعمل الزيادة بأجزاء من الألف من الواحد , يعني 19,001 ثم 19,002 حتى أصل إلى 20

وأيضاً لما أفحص اللون في البيكسل أريده يعطيني الدرجة بنفس الطريقة يعني يعطيني الدرجة هكذا 19,001 و 19,002 إلخ ...

تم تعديل هذه المشاركة بواسطة هدف الشمالي في 21 سبتمبر 2010 في 12:53

#10

الألوان تكون مخزنة على شكل integer، وليس float

#11
herch كتب:

الألوان تكون مخزنة على شكل integer، وليس float

طيب بعشرة أجزاء بدل الألف يعني في المثال السابق يكون الإنتقال من 19 إلى 20 هكذا :

19,01 ثم 19,02 حتى نصل 20 بعد 10 خطوات .

أم أن هذا أيضاً غير ممكن في الجافا ؟

تم تعديل هذه المشاركة بواسطة هدف الشمالي في 21 سبتمبر 2010 في 13:56

#12

وجدت الدالة getHSBColor في الكلاس Color ويبدو أنها تعطي float

ولكن كيف ممكن أحصل على قيمة بيكسل في صورة عن طريقها ؟

تم تعديل هذه المشاركة بواسطة هدف الشمالي في 22 سبتمبر 2010 في 06:34

#13

يا أخي ما الهدف من هذا كله؟

لماذا تريد أن تزيد عدد الألوان العدد الموجود كبير جداً ويكفي لأي شيء

تكلم عن تطبيقك

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#14

HSB : Hue, Saturation, Brightness

ناتج getHSBColor ليس هو لون ال pixel

#15
علاء الصالحي كتب:

يا أخي ما الهدف من هذا كله؟

لماذا تريد أن تزيد عدد الألوان العدد الموجود كبير جداً ويكفي لأي شيء

تكلم عن تطبيقك

تحياتي

ياإخوان أنا والله محتاج هذا الكود لقياس التغير البسيط في اللون , يعني أحتاج معرفة التغير الحاصل بأقل من الدرجة .

تم تعديل هذه المشاركة بواسطة هدف الشمالي في 23 سبتمبر 2010 في 13:57

#16

راجع رد الأخ herch بخصوص HSB.

في اكثر من رد تم تنبيهك أن كل لون يمثل بـ 8bit لذا فالقيم الممكنه هي 0-255 فقط .

إن كنت تريد أفضل من ذلك هناك الـ48-bit Integer RGB color representation

وهنا كل لون يمثل بـ16bit اي لديك 65,536 قيمة للون الواحد .

على الأغلب التعامل مع 48bit digital image قليل

اقتباس
ياإخوان أنا والله محتاج هذا الكود لقياس التغير البسيط في اللون , يعني أحتاج معرفة التغير الحاصل بأقل من الدرجة .

هل ممكن توضيح في أي مشروع تحتاج لهذا الشئ فربما تختلف الأمور حينها.

#17
herch كتب:

HSB : Hue, Saturation, Brightness

ناتج getHSBColor ليس هو لون ال pixel

شكراً على التوضيح , إذاً هي للإشباع والسطوع و....... .

ولكن لم أفهم ماهي الـ Hue

#18
YaSeenTA كتب:

راجع رد الأخ herch بخصوص HSB.

في اكثر من رد تم تنبيهك أن كل لون يمثل بـ 8bit لذا فالقيم الممكنه هي 0-255 فقط .

إن كنت تريد أفضل من ذلك هناك الـ48-bit Integer RGB color representation

وهنا كل لون يمثل بـ16bit اي لديك 65,536 قيمة للون الواحد .

على الأغلب التعامل مع 48bit digital image قليل

هل ممكن توضيح في أي مشروع تحتاج لهذا الشئ فربما تختلف الأمور حينها.

أخي هل ممكن تعطيني مثال على الـ48-bit Integer RGB color representation

#19

ليس لدي الكثير من المعلومات عن 48bit images. بعض الـscanners الحديثة تدعم هذا النوع .

حاول تبحث في google أكثر

هناك الكثير من البرامج التي تدعمها منها SilverFast , easyHDR.

ابحث كذلك عن HDR

الآن هناك 96bit TIFF

تم تعديل هذه المشاركة بواسطة YaSeenTA في 23 سبتمبر 2010 في 18:32

#20
YaSeenTA كتب:

راجع رد الأخ herch بخصوص HSB.

في اكثر من رد تم تنبيهك أن كل لون يمثل بـ 8bit لذا فالقيم الممكنه هي 0-255 فقط .

إن كنت تريد أفضل من ذلك هناك الـ48-bit Integer RGB color representation

وهنا كل لون يمثل بـ16bit اي لديك 65,536 قيمة للون الواحد .

على الأغلب التعامل مع 48bit digital image قليل

هل ممكن توضيح في أي مشروع تحتاج لهذا الشئ فربما تختلف الأمور حينها.

أخي شوف الكود التالي الذي وضعته بحدث الضغط على الزرار :

   private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {                                         
      JFileChooser fileChooser11 = new JFileChooser();


      fileChooser11.setLocale(Locale.UK);
      int retval = fileChooser11.showSaveDialog(ml2.this);


      if (retval == 0) {
       ur = (String.valueOf(fileChooser11.getSelectedFile()));

        InputStream is;
        try {
            is = new BufferedInputStream(new FileInputStream(ur));
            BufferedImage image;
        try {
            ImageIcon i=new ImageIcon();
            image = ImageIO.read(is);


    int w = image.getWidth();
    int h = image.getHeight();

  int pixel = image.getRGB(w/2, h/2);


         int blue1 = (pixel & 0x000000ff);

       System.out.println(blue1);

       } catch (IOException ex) {
            Logger.getLogger(ml2.class.getName()).log(Level.SEVERE, null, ex);
        }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ml2.class.getName()).log(Level.SEVERE, null, ex);
        }

      }
    }

بعد الضغط على الزرار نحصل على اللون الأزرق بالنظام الستعشري , وهي نتيجة فحص بيكسل قيمة اللون الأزرق فيها 255 والنتيجة هي 255

وقمت بتعديل السطر التالي :

 int blue1 = (pixel & 0x000000ff);

إلى :

 int blue3 = (pixel & 0x000000000000ffff);

فكانت النتيجة لنفس البيكسل هي 65535

فهل الطريقة صحيحة علماً أنك قلت أن أعلى قيمة في نظام 48bit هي 65536 وليس 65535

تم تعديل هذه المشاركة بواسطة هدف الشمالي في 24 سبتمبر 2010 في 00:16

#21
اقتباس
فكانت النتيجة لنفس البيكسل هي 65535

فهل الطريقة صحيحة علماً أنك قلت أن أعلى قيمة في نظام 48bit هي 65536 وليس 65535

أستطيع الجزم أن الصورة التي تقوم بقراءتها ليست من النوع 48bit.

على إفتراض أن لديك صورة من النوع 48bit , لا أعتقد أن الإستخدام المباشر للدوال او للفئات في الكود الذي وضعته سينفع.

ستحتاج لكتابة فئة خاصة بذلك. لا أعلم إن كانت هناك فئة في المكتبات الخاصة بجافا تدعم ذلك النوع.

ربما تجد ما يفيدك هنا

JIU - Java Imaging Utilities

ImageJ

شئ أخر أنا قلت هناك 65536 قيمة للون أي من 0 إلى 65535 . لكن ما قمت به أنت بعيد عن الـ 48bit images .

تم تعديل هذه المشاركة بواسطة YaSeenTA في 24 سبتمبر 2010 في 05:34

#22
هدف الشمالي كتب:

فكانت النتيجة لنفس البيكسل هي 65535

فهل الطريقة صحيحة علماً أنك قلت أن أعلى قيمة في نظام 48bit هي 65536 وليس 65535

النتيجه صحيحه باذن الله

لانك علشان تجيب الارقام اللى ممكن تمثلها فى 16 bit

بيكون كدا

Math.pow(2, 16)-1;

نتيجه الكود هذا هى 65535

لو حذفت -1 من الكود هتكون النتيجه 65536

لكن التمثيل يبدا من ان كل الخانات اصفار

لذلك يتم انقاص واحد من الرقم الاصلى

فتكون اقصى قيمه فى العد بالنسبه للأله هى 65535

لان القيم تبدا من 0 الى 65535

بالتوفيق :D

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 24 سبتمبر 2010 في 08:31

Software Developer
Mahmoudkelany.com


 

#23
اقتباس
النتيجه صحيحه باذن الله

لكنها لا تمثل قيمة اللون الأزرق فقط , بل تمثل قيمة لونين. لذا فالنتيجة خاطئة .

فمن الواضح أن الأخ يقرأ صورة ليست 48bit .

تأكد أولاً من كون الـ depth الخاص بالصورة هو 48.

اطلع على كود JIU في الوصلة التي وضعتها في رد سابق.

عليك أولاً فهم معنى color depth. أحد الإخوان وضع لك وصلة في wikipedia.

إقرأ جيداً قبل أن تفكر في كتابة الكود . فهم الموضوع أولاً ثم كتابة الكود .

#24
YaSeenTA كتب:

لكنها لا تمثل قيمة اللون الأزرق فقط , بل تمثل قيمة لونين. لذا فالنتيجة خاطئة .

فمن الواضح أن الأخ يقرأ صورة ليست 48bit .

تأكد أولاً من كون الـ depth الخاص بالصورة هو 48.

اطلع على كود JIU في الوصلة التي وضعتها في رد سابق.

عليك أولاً فهم معنى color depth. أحد الإخوان وضع لك وصلة في wikipedia.

إقرأ جيداً قبل أن تفكر في كتابة الكود . فهم الموضوع أولاً ثم كتابة الكود .

معذرة اخى الكريم

صراحه انا لم اطلع على الكود

انا تكلمت من منطلق التعقيب على النتيجه التى ذكرها هل صحيحه بالنسبه للرقم 65535 ام لا

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 24 سبتمبر 2010 في 09:44

Software Developer
Mahmoudkelany.com


 

#25

حتى لا يحدث سوء تفاهم .

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

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

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

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

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

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