2013-03-14 5 views
12

मैं यह सीधे आगे here से सूत्रों का उपयोग किया जाना चाहिए आरजीबी से प्रयोगशाला अंतरिक्ष करने के लिए रंग परिवर्तित करने में समस्या आ रही है, केवल मैं गलत मानआरजीबी XYZ और प्रयोगशाला रंग रूपांतरण के लिए

  • वापस हो रही है आरजीबी = 56,79,132

  • एक्स = 8,592

  • वाई = 8,099
  • जेड = 22.940

और CIE-एल * अब के रूप में

  • L * 34,188
  • एक * 8,072
  • b * -32,478

यह मेरा कोड है, लेकिन मैं नहीं देख सकता कि मैं कहां गलत हो रहा हूं। यह शायद मेरे सामने इस fella जैसे फ्लोटिंग पॉइंट्स के कारण हो सकता है। धन्यवाद।

// user colour 
var Red = 56; 
var Green = 79; 
var Blue = 132; 

// user colour converted to XYZ space 
XYZ = RGBtoXYZ(Red,Green,Blue) 
var colX = XYZ[0]; 
var colY = XYZ[1]; 
var colZ = XYZ[2]; 

// alert(XYZ) 

LAB = XYZtoLAB(colX, colY, colZ) 

alert(LAB) 

function RGBtoXYZ(R, G, B) 
{ 
    var_R = parseFloat(R/255)  //R from 0 to 255 
    var_G = parseFloat(G/255)  //G from 0 to 255 
    var_B = parseFloat(B/255)  //B from 0 to 255 

    if (var_R > 0.04045) var_R = ((var_R + 0.055)/1.055)^2.4 
    else     var_R = var_R/12.92 
    if (var_G > 0.04045) var_G = ((var_G + 0.055)/1.055)^2.4 
    else     var_G = var_G/12.92 
    if (var_B > 0.04045) var_B = ((var_B + 0.055)/1.055)^2.4 
    else     var_B = var_B/12.92 

    var_R = var_R * 100 
    var_G = var_G * 100 
    var_B = var_B * 100 

    //Observer. = 2°, Illuminant = D65 
    X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805 
    Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722 
    Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505 
    return [X, Y, Z] 
} 


function XYZtoLAB(x, y, z) 
{ 
    var ref_X = 95.047; 
    var ref_Y = 100.000; 
    var ref_Z = 108.883; 

    var_X = x/ref_X   //ref_X = 95.047 Observer= 2°, Illuminant= D65 
    var_Y = y/ref_Y   //ref_Y = 100.000 
    var_Z = z/ref_Z   //ref_Z = 108.883 

    if (var_X > 0.008856) var_X = var_X^(1/3) 
    else     var_X = (7.787 * var_X) + (16/116) 
    if (var_Y > 0.008856) var_Y = var_Y^(1/3) 
    else     var_Y = (7.787 * var_Y) + (16/116) 
    if (var_Z > 0.008856) var_Z = var_Z^(1/3) 
    else     var_Z = (7.787 * var_Z) + (16/116) 

    CIE_L = (116 * var_Y) - 16 
    CIE_a = 500 * (var_X - var_Y) 
    CIE_b = 200 * (var_Y - var_Z) 

return [CIE_L, CIE_a, CIE_b] 
} 

उत्तर

15

मैं यकीन है कि ^ एक शक्ति ऑपरेटर जावास्क्रिप्ट में बिटवाइज़ XOR नहीं है हूँ। मुझे लगता है कि Math.pow वह है जिसे आप ढूंढ रहे हैं।

0

function xyzc(c){return ((c/255)>0.04045)?Math.pow((((c/255)+0.055)/1.055),2.4)*100:(c/255)/12.92*100;}

इस लाइन XYZ

करने के लिए एक rgb चैनल में परिवर्तित कर देंगे
संबंधित मुद्दे