2016-05-10 5 views
-4

Если я введенный 0xffffffff, то выход должен быть: А: 255 Р: 255 G: 255 Б: 255Преобразование этого значения цветового типа для ARGB

Я не могу найти какие-либо учебники для этого converthing , Благодаря!

+0

показать, что вы сделали. введите код в описании. –

+0

Я все еще ничего не делал, потому что не знаю формулы для ее преобразования. Можете ли вы сказать, что это за цвет? "0xaa336539" – Trafalgar

+0

Используйте калькулятор, и вы увидите, что hex '0xaa' преобразует в десятичный' 170', '0x33' =' 51' и т. Д. – Quantic

ответ

3

Вы можете использовать Color структуру (От узла .NET System.Drawing) для разбора этого:

using System; 
using System.Drawing; 

void Main() 
{ 
    var c = Color.FromArgb(unchecked((int)0xaa336539)); 
    Console.WriteLine("Alpha: {0}", c.A); 
    Console.WriteLine("Red: {0}", c.R); 
    Console.WriteLine("Green: {0}", c.G); 
    Console.WriteLine("Blue: {0}", c.B); 
} 

, который производит следующий вывод:

Alpha: 170 
Red: 51 
Green: 101 
Blue: 57 
2

Перемещение и маскировка.

(хотя некоторые предпочитают использовать / 256 для сдвига и % 256 для маски)

unsigned long x = 0xaa336539; 

// Note the LSB to MSB order 

//mask 
unsigned char b = x & 0xff; 

//shift 
x >>= 8; 

//mask 
unsigned char g = x & 0xff; 

//shift 
x >>= 8; 

//mask 
unsigned char r = x & 0xff; 

//shift 
x >>= 8; 

//mask 
unsigned char a = x & 0xff; 

// Technically, just saving it into an 8 bit wide container is the same as the masking, although some compilers might warn you 
+1

Вы также можете использовать: 'var c = Color.FromArgb (unchecked ((int) 0xaa336539));', а затем просто получить доступ к свойствам R, G, B и A. –

+0

Возможно, лучше использовать этот метод .NET, который @ChrisDunway рекомендует вместо того, чтобы кататься самостоятельно, как и я (но, может быть, мое помогает показать происхождение вещей). Если он ответит, вы должны перенести галочку на него. Ссылка URL https://msdn.microsoft.com/en-us/library/2zys7833(v=vs.110).aspx – infixed

+0

Хм, тег C# прочь ... может быть, это не .NET-вещь больше – infixed

1
// Original input 
var input = "0xaa336539"; 

// Gets aa336539 
var inputRemovePrefix = input.Substring(2); 

// Converts to a long 
var numberConversion = long.Parse(inputRemovePrefix, System.Globalization.NumberStyles.HexNumber); 

// Converts to 6 character hex string so the next operation will always work 
var convertedInput = numberConversion.ToString("X6"); 

var aVal = int.Parse(convertedInput.Substring(0,2), System.Globalization.NumberStyles.HexNumber); 
var rVal = int.Parse(convertedInput.Substring(2,2), System.Globalization.NumberStyles.HexNumber); 
var gVal = int.Parse(convertedInput.Substring(4,2), System.Globalization.NumberStyles.HexNumber); 
var bVal = int.Parse(convertedInput.Substring(6,2), System.Globalization.NumberStyles.HexNumber); 

// Prints result 
Console.WriteLine($"A: {aVal} R: {rVal} G: {gVal} B: {bVal}");