2014-07-10 3 views
2

가 나는 article가 BGR에 Interior.Color에 의해 반환 된 값을 말하는 내가 RGB로 변환하기 위해 노력하고있어하지만 난 여전히 이상한 색상변환은

을 가지고 그리고 난을 검색하기 위해 노력하고있어 발견 엑셀 셀의 기본 색상은이 같은 ControlPaint.Light를 사용하여 빛을 여기

int rgbColor = ExcelDoc.BGRToRGB((int)contentCanonical.Interior.Color); 

Color canonicalColor = ColorTranslator.FromOle(rgbColor); 
Color backgroundColor = ControlPaint.Light(canonicalColor, 75); 

내가 wron 무엇을하고있는 중이 야 내 변환 방법

public static int BGRToRGB(int bgr) 
{ 
    byte[] hexBGR; 
    byte[] hexRGB = new byte[4] {0,0,0,0}; 

    hexBGR = BitConverter.GetBytes(bgr); 

    hexRGB[0] = hexBGR[0]; 
    hexRGB[1] = hexBGR[3]; 
    hexRGB[2] = hexBGR[2]; 
    hexRGB[3] = hexBGR[1]; 

    return BitConverter.ToInt32(hexRGB, 0); 
} 

입니다 지?

+0

두 단계 모두에서 색상이라고 생각하십니까? (색상을 표시하거나 mspaint를 사용하는 웹 응용 프로그램에 바이트 넣기) – Sayse

+0

예 VS 디버거를 사용하면 'contentCanonical.Interior.Color'는 좋은 것이지만 변환하면 색상이 완전히 변경됨 – PeterFour

+0

수학 공식은 BGR = (파랑 * 65536) + (녹색 * 256) + 빨강이 도움이되는 경우 –

답변

3

method (나는 색상의 알파 부분을 "절단"야)이에서 BGR 컬러 int를 돌려 색상

public static Color From0BGR(int bgrColor) 
{ 
    // Get the color bytes 
    var bytes = BitConverter.GetBytes(bgrColor); 

    // Return the color from the byte array 
    return Color.FromArgb(bytes[0], bytes[1], bytes[2]); 
} 

을이 기능을 반환 사용하고 있습니다 rgb 색상

public static int Get0BGR(Color rgbColor) 
{ 
    // Return a zero-alpha 24-bit BGR color integer 
    return (0 << 24) + (rgbColor.B << 16) + (rgbColor.G << 8) + rgbColor.R; 
} 
+1

덕분에 반환 된 색상을 Light 메서드에 직접 넣어 사용했기 때문에 매력처럼 작동합니다 – PeterFour

0

나는

/// <summary> 
    /// Converts the color to an Argb color 
    /// </summary> 
    /// <param name="color">Color to convert</param> 
    /// <returns>The Argb color</returns> 
    public static int ToArgb(int color) 
    { 
     int Argb = (color >> 16) | (color & 0xFF) << 16 | (color & 0x00FF00); 
     return Argb; 
    } 

    /// <summary> 
    /// Converts the color to a MSO Color 
    /// </summary> 
    /// <param name="Argb">Color to convert</param> 
    /// <returns>The MSO color</returns> 
    public static int ToMsoColor(int Argb) 
    { 
     Argb &= 0xFFFFFF; 
     int color = (Argb >> 16) | (Argb & 0xFF) << 16 | (Argb & 0x00FF00); 
     return color; 
    }