首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

Win32 COLORREF 與 .NET Color 結構互轉實作

     編輯:關於C#

色彩格式差異分析

  • Win32 COLORREF:32 位整數,位元排列 BGR (0x00BBGGRR),無 Alpha 通道。
  • .NET Color:32 位 ARGB,位元排列 AARRGGBB,最高位元組為 Alpha。

轉換核心邏輯

核心在於位元位移與遮罩,將 R、G、B 分量重新排序。

Color → COLORREF (BGR)

public static int ColorToColorRef(Color color)
{
    int argb = color.ToArgb(); // AARRGGBB
    int blue  = argb & 0xFF;
    int green = (argb >> 8) & 0xFF;
    int red   = (argb >> 16) & 0xFF;
    // 組合為 BGR (0x00BBGGRR)
    return (blue << 16) | (green << 8) | red;
}

COLORREF → Color

public static Color ColorRefToColor(int colorRef)
{
    // COLORREF 為 0x00BBGGRR
    int red   = colorRef & 0xFF;
    int green = (colorRef >> 8) & 0xFF;
    int blue  = (colorRef >> 16) & 0xFF;
    // Alpha 設為 255 (不透明)
    return Color.FromArgb(255, red, green, blue);
}

// 簡潔版
public static Color ColorRefToColor(int colorRef) => 
    Color.FromArgb(colorRef & 0xFF, (colorRef >> 8) & 0xFF, (colorRef >> 16) & 0xFF);

MFC/.NET 混合開發應用場景

當 MFC 控制項 (如 CColorDialog) 傳回 COLORREF,需轉為 Color 供 .NET 屬性 (如 BackColor) 使用;反之亦然。封裝為擴充方法可提升開發效率:

public static class ColorExtensions
{
    public static int ToColorRef(this Color c) => ...;
    public static Color ToColor(this int colorRef) => ...;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved