سؤال

هل هناك طريقة سهلة للتحويل بين نماذج الألوان في Java (RGB وHSV وLab).

بافتراض نموذج الألوان RGB:

  • كيف يمكنني حساب لوحة ألوان طيف الجسم الأسود؟أريد استخدامه لمخطط خريطة الحرارة.
  • ماذا عن الطيف ذو الطول الموجي الواحد؟

يحرر: لقد وجدت أن مساحة اللون يمكن استخدام الفئة للتحويلات بين RGB/CIE والعديد من نماذج الألوان الأخرى.

هل كانت مفيدة؟

المحلول

يمكنك إنشاء مثل هذه اللوحة باستخدام نموذج الألوان HSV.يكون ذلك سهلاً بمجرد تثبيت رمز HSV إلى RGB والتلاعب بالأرقام لبضع دقائق.

ومع ذلك، أعتقد أنه لا يستحق إضافة الكود إلى مشروعك فقط لإنشاء لوحة صغيرة.

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

يتيح لك Photoshop تحرير اللوحات ويأتي مع لوحة ألوان سوداء جميلة جدًا كإعداد مسبق.

يمكنك ببساطة حفظها كملف .act.الملف نفسه هو مجرد ملف بسيط مكون من 256 لونًا و3 بايت (يتم قراءة الترتيب، أخضر، أزرق.8 بت لكل قناة).

نصائح أخرى

تحتوي Java على تحويل RGB إلى HSB مدمج.عندما أحتاج إلى مجموعة سريعة من الألوان في Java، أفعل هذا فقط:

public Color[] generateColors(int n)
{
    Color[] cols = new Color[n];
    for(int i = 0; i < n; i++)
    {
        cols[i] = Color.getHSBColor((float) i / (float) n, 0.85f, 1.0f);
    }
    return cols;
}

إنه اختراق سريع وقذر (أود أن أقوم بتعديل الأرقام "السحرية" لتطبيقك)، ولكن بالنسبة لاستخداماتي البسيطة، فإنه يولد لوحة لطيفة ومشرقة وممتعة.

ربما لا أفهم سؤالك، لكن لا يمكنك حقًا إنشاء طيف حقيقي للجسم الأسود من جهاز إخراج RGB.سيكون التدرج اللوني المحدود مشكلة، إذا لم يكن هناك شيء آخر.إذا كان كل ما تريده هو شيء يشبه طيف الجسم الأسود بصريًا، فمن المحتمل أن يكون ذلك أسهل كثيرًا.

على سبيل التقريب، منحدر من (R,G,B) (0,0,0) إلى (255,0,0)، ثم إلى (255,255,0)، ثم إلى (255,255,255).سيعطيك ذلك الانتقال من الأحمر الباهت إلى البرتقالي، إلى الأصفر، إلى الأبيض.

إذا كنت تريد شيئا أكثر علمية، مقالة ويكيبيديا على إشعاع الجسم الأسود لديه بعض المؤامرات من اللون مقابل درجة الحرارة.بمجرد معرفة إحداثيات CIE، يمكنك ترجمتها إلى RGB في مساحة الألوان المفضلة لديك.

يحرر:وجدت بعض المراجع الأخرى عبر الإنترنت:ما هو لون الشمس؟ ما هو لون الجسم الأسود؟

يمكنك توليد هذا الطيف اللوني https://i.stack.imgur.com/ktLmt.jpg

باستخدام الكود التالي:

public void render(Screen screen) {
    int green = 255;
    int red = 0;

    for (int i = 0; i <= 255 * 2; i++) {
        int rate = i / 255;

        screen.fillRect((x + (i * width)/6), y, width, height, new Color(red, green, 0));

        red += 1 - rate;
        green -= rate;
    }   
}

هذه طريقة رائعة لإنشاء مربع ألوان HSL في AS3.

/**
 * Generate a BitmapData HSL color square (n x n) of hue
 * At a low n dimension you get cool blocky color palettes (e.g. try n=10)
 */
function generateColorSquare(n:uint, hue:uint):BitmapData
            {
                var bd:BitmapData = new BitmapData(n, n, false, 0xFFFFFF);
                for (var i:uint=n*n; i > 0; i--)
                {
                    bd.setPixel(i % n, Math.floor(i / n),  HSBColor.convertHSBtoRGB(hue, i / (n*n), (1/n) * (i % n) ));
                }
                return bd;
            }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top