2009-08-25 27 views
8

Tôi có giá trị ARGB được lưu trữ dưới dạng loại int. Nó được lưu trữ bằng cách gọi ToArgb.chia ARGB thành giá trị byte

Tôi hiện muốn giá trị byte của từng kênh màu từ giá trị int.

ví dụ

int mycolor = -16744448; 
byte r,g,b,a; 

GetBytesFromColor(mycolor,out a, out r, out g, out b); 

Làm thế nào bạn sẽ thực hiện GetBytesFromColor?

Để cung cấp ngữ cảnh, tôi chuyển một giá trị màu tồn tại trong db dưới dạng int cho ứng dụng Silverlight cần các giá trị byte riêng lẻ để xây dựng một đối tượng màu.

System.Windows.Media.Color.FromArgb(byte a, byte r, byte g, byte b) 

Trả lời

13

Bạn đang theo sau 4 khối liên tiếp 8 bit từ số nguyên 32 bit; do đó, một sự kết hợp của mặt nạ và chuyển:

b = (byte)(myColor & 0xFF); 
g = (byte)((myColor >> 8) & 0xFF); 
r = (byte)((myColor >> 16) & 0xFF); 
a = (byte)((myColor >> 24) & 0xFF); 
+0

như thế nào quá trình này đảo ngược? – nebkat

+0

'mycolor = (a << 24) + (r << 16) + (g << 8) + b;' –

2
public void GetBytesFromColor(int color, out a, out r, out g, out b) 
{ 
    Color c = Color.FromArgb(color); 
    a = c.A; 
    r = c.R; 
    g = c.G; 
    b = c.B; 
} 
+1

-1. Silverlight không có quá tải từ FromArgb. – AnthonyWJones

Các vấn đề liên quan