السلام عليكم ورحمة الله وبركاته
الإخوة الفضلاء أحتاج تقسيم درجات اللون الأحمر والأخضر والأزرق (RGB) من صفر إلى 25500 بدلاً من 0 إلى 255
فهل هناك طريقة لذلك ؟؟
السلام عليكم ورحمة الله وبركاته
الإخوة الفضلاء أحتاج تقسيم درجات اللون الأحمر والأخضر والأزرق (RGB) من صفر إلى 25500 بدلاً من 0 إلى 255
فهل هناك طريقة لذلك ؟؟
تم تعديل هذه المشاركة بواسطة هدف الشمالي في 19 سبتمبر 2010 في 13:19
انت تعرف ان كل لون هو من 0 الى 255
يعني RGB = 255,255,255
الرقم الاول يمثل الاحمر Red
و الثاني الاخضر Green
و الثالث الازرق Blue
فصراحة لم افهم سؤالك
هل من الممكن توضيحه
شكرا
ليه من 0 الى 25500 بالذات ؟؟
طب ما تقسمها بنظام السادس عشر؟؟
بتكون افضل
وهذا التقسيم معروف جدا
او انك تقسمها الى
احمر من 0 -255
اخضر من 0 -255
ازرق من 0 - 255
هذه هى طرق التقسيم
حتى الفوتوشوب يقوم بهذا التقسيم
تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 19 سبتمبر 2010 في 17:40
.S.T.A.L.K.E.R كتب:انت تعرف ان كل لون هو من 0 الى 255
يعني RGB = 255,255,255
الرقم الاول يمثل الاحمر Red
و الثاني الاخضر Green
و الثالث الازرق Blue
فصراحة لم افهم سؤالك
هل من الممكن توضيحه
شكرا
ياأخي أنا أريد تكون أعلى قيمة لكل لون من الأحمر والأزرق والأخضر أكثر من 255
هدف الشمالي كتب:ياأخي أنا أريد تكون أعلى قيمة لكل لون من الأحمر والأزرق والأخضر أكثر من 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
Mahmoud Kelany كتب:
أخ محمود أنا أحتاج هذا التقسيم حاجة كبيرة ,
أما سؤالك لماذا لاأقسمها بنظام السادس عشر ؟
فأنا الحقيقة لاأعرف وهذا الكود أرجو منك تحويله للنظام السادس عشري :
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);
}
}
}دعني اوضحلك ان هذا الرقم 0x00ff0000
هو عبارة عن RGBA
(0,255,0,0)
حيث الخانة الاولى تمثل مقدار الشفافية ALPHA
تم تعديل هذه المشاركة بواسطة .S.T.A.L.K.E.R في 20 سبتمبر 2010 في 12:15
يا أخي..
فكر في الألوان كدائره...
الدائه يتم تقسيمها إلى 255 جزء......
لذا أعلى لون في العالم هو اللون الموجود على الجزء رقم 255 ....
لنفترض ياإخوان أني أريد أزيد اللون الأزرق في صورة ما , وكانت درجته 19 ,الحل الموجود هو أن أزيد واحد أو أكثر , يعني
بعد 19 هو 20
وأنا أريد أعمل الزيادة بأجزاء من الألف من الواحد , يعني 19,001 ثم 19,002 حتى أصل إلى 20
وأيضاً لما أفحص اللون في البيكسل أريده يعطيني الدرجة بنفس الطريقة يعني يعطيني الدرجة هكذا 19,001 و 19,002 إلخ ...
تم تعديل هذه المشاركة بواسطة هدف الشمالي في 21 سبتمبر 2010 في 12:53
الألوان تكون مخزنة على شكل integer، وليس float
herch كتب:الألوان تكون مخزنة على شكل integer، وليس float
طيب بعشرة أجزاء بدل الألف يعني في المثال السابق يكون الإنتقال من 19 إلى 20 هكذا :
19,01 ثم 19,02 حتى نصل 20 بعد 10 خطوات .
أم أن هذا أيضاً غير ممكن في الجافا ؟
تم تعديل هذه المشاركة بواسطة هدف الشمالي في 21 سبتمبر 2010 في 13:56
وجدت الدالة getHSBColor في الكلاس Color ويبدو أنها تعطي float
ولكن كيف ممكن أحصل على قيمة بيكسل في صورة عن طريقها ؟
تم تعديل هذه المشاركة بواسطة هدف الشمالي في 22 سبتمبر 2010 في 06:34
يا أخي ما الهدف من هذا كله؟
لماذا تريد أن تزيد عدد الألوان العدد الموجود كبير جداً ويكفي لأي شيء
تكلم عن تطبيقك
تحياتي
HSB : Hue, Saturation, Brightness
ناتج getHSBColor ليس هو لون ال pixel
علاء الصالحي كتب:يا أخي ما الهدف من هذا كله؟
لماذا تريد أن تزيد عدد الألوان العدد الموجود كبير جداً ويكفي لأي شيء
تكلم عن تطبيقك
تحياتي
ياإخوان أنا والله محتاج هذا الكود لقياس التغير البسيط في اللون , يعني أحتاج معرفة التغير الحاصل بأقل من الدرجة .
تم تعديل هذه المشاركة بواسطة هدف الشمالي في 23 سبتمبر 2010 في 13:57
راجع رد الأخ herch بخصوص HSB.
في اكثر من رد تم تنبيهك أن كل لون يمثل بـ 8bit لذا فالقيم الممكنه هي 0-255 فقط .
إن كنت تريد أفضل من ذلك هناك الـ48-bit Integer RGB color representation
وهنا كل لون يمثل بـ16bit اي لديك 65,536 قيمة للون الواحد .
على الأغلب التعامل مع 48bit digital image قليل
اقتباسياإخوان أنا والله محتاج هذا الكود لقياس التغير البسيط في اللون , يعني أحتاج معرفة التغير الحاصل بأقل من الدرجة .
هل ممكن توضيح في أي مشروع تحتاج لهذا الشئ فربما تختلف الأمور حينها.
herch كتب:HSB : Hue, Saturation, Brightness
ناتج getHSBColor ليس هو لون ال pixel
شكراً على التوضيح , إذاً هي للإشباع والسطوع و....... .
ولكن لم أفهم ماهي الـ Hue
YaSeenTA كتب:راجع رد الأخ herch بخصوص HSB.
في اكثر من رد تم تنبيهك أن كل لون يمثل بـ 8bit لذا فالقيم الممكنه هي 0-255 فقط .
إن كنت تريد أفضل من ذلك هناك الـ48-bit Integer RGB color representation
وهنا كل لون يمثل بـ16bit اي لديك 65,536 قيمة للون الواحد .
على الأغلب التعامل مع 48bit digital image قليل
هل ممكن توضيح في أي مشروع تحتاج لهذا الشئ فربما تختلف الأمور حينها.
أخي هل ممكن تعطيني مثال على الـ48-bit Integer RGB color representation
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
اقتباسفكانت النتيجة لنفس البيكسل هي 65535فهل الطريقة صحيحة علماً أنك قلت أن أعلى قيمة في نظام 48bit هي 65536 وليس 65535
أستطيع الجزم أن الصورة التي تقوم بقراءتها ليست من النوع 48bit.
على إفتراض أن لديك صورة من النوع 48bit , لا أعتقد أن الإستخدام المباشر للدوال او للفئات في الكود الذي وضعته سينفع.
ستحتاج لكتابة فئة خاصة بذلك. لا أعلم إن كانت هناك فئة في المكتبات الخاصة بجافا تدعم ذلك النوع.
ربما تجد ما يفيدك هنا
شئ أخر أنا قلت هناك 65536 قيمة للون أي من 0 إلى 65535 . لكن ما قمت به أنت بعيد عن الـ 48bit images .
تم تعديل هذه المشاركة بواسطة YaSeenTA في 24 سبتمبر 2010 في 05:34
هدف الشمالي كتب:فكانت النتيجة لنفس البيكسل هي 65535
فهل الطريقة صحيحة علماً أنك قلت أن أعلى قيمة في نظام 48bit هي 65536 وليس 65535
النتيجه صحيحه باذن الله
لانك علشان تجيب الارقام اللى ممكن تمثلها فى 16 bit
بيكون كدا
Math.pow(2, 16)-1;
نتيجه الكود هذا هى 65535
لو حذفت -1 من الكود هتكون النتيجه 65536
لكن التمثيل يبدا من ان كل الخانات اصفار
لذلك يتم انقاص واحد من الرقم الاصلى
فتكون اقصى قيمه فى العد بالنسبه للأله هى 65535
لان القيم تبدا من 0 الى 65535
بالتوفيق :D
تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 24 سبتمبر 2010 في 08:31
اقتباسالنتيجه صحيحه باذن الله
لكنها لا تمثل قيمة اللون الأزرق فقط , بل تمثل قيمة لونين. لذا فالنتيجة خاطئة .
فمن الواضح أن الأخ يقرأ صورة ليست 48bit .
تأكد أولاً من كون الـ depth الخاص بالصورة هو 48.
اطلع على كود JIU في الوصلة التي وضعتها في رد سابق.
عليك أولاً فهم معنى color depth. أحد الإخوان وضع لك وصلة في wikipedia.
إقرأ جيداً قبل أن تفكر في كتابة الكود . فهم الموضوع أولاً ثم كتابة الكود .
YaSeenTA كتب:لكنها لا تمثل قيمة اللون الأزرق فقط , بل تمثل قيمة لونين. لذا فالنتيجة خاطئة .
فمن الواضح أن الأخ يقرأ صورة ليست 48bit .
تأكد أولاً من كون الـ depth الخاص بالصورة هو 48.
اطلع على كود JIU في الوصلة التي وضعتها في رد سابق.
عليك أولاً فهم معنى color depth. أحد الإخوان وضع لك وصلة في wikipedia.
إقرأ جيداً قبل أن تفكر في كتابة الكود . فهم الموضوع أولاً ثم كتابة الكود .
معذرة اخى الكريم
صراحه انا لم اطلع على الكود
انا تكلمت من منطلق التعقيب على النتيجه التى ذكرها هل صحيحه بالنسبه للرقم 65535 ام لا
تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 24 سبتمبر 2010 في 09:44
حتى لا يحدث سوء تفاهم .
أخ محمد الجملتين الاولى والثانية رد على تعقيبك والباقي رد للأخ صاحب السؤال فمن الواضح أنه مستعجل في الحصول على الكود من دون أن يتعمق في فهم المشكلة.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…