ألفا + RGB -> Argb؟
-
18-09-2019 - |
سؤال
في AS3، هل هناك فائدة أو وظيفة لتحويل لون RGB (مثل 0xFF0000) وقيمة ألفا (على سبيل المثال .5) في قيمة Argb 32 بت؟
ومن argb إلى RGB + ألفا؟
بعض التفسير: يمكن أن تتخذ Bitmapdata قيمة Argb في منشئها، لكن تعبئة الأشكال في Sprites عادة ما تأخذ قيم RGB. أرغب في المرافق المذكورة أعلاه لضمان تطابق الألوان.
المحلول
var argb : int = (alpha<<24)|rgb;
var rgb : int = 0xFFFFFF & argb;
var alpha : int = (argb>>24)&0xFF;
نصائح أخرى
A، R، G، B هو تنسيق شائع يستخدمه بطاقات الفيديو للسماح ب "مزج الملمس" والشفافية في نسيج. تستخدم معظم الأنظمة فقط 8bits ل R، G، و B بحيث تترك 8 مليار آخر مجانا من حجم كلمة 32bit وهو أمر شائع في أجهزة الكمبيوتر.
The mapping is:
For Bits:
33222222 22221111 11111100 00000000
10987654 32109876 54321098 76543210
AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
00000000 RRRRRRRR GGGGGGGG BBBBBBBB
شيء من هذا القبيل:
private function toARGB(rgb:uint, newAlpha:uint):uint{
var argb:uint = 0;
argb = (rgb);
argb += (newAlpha<<24);
return argb;
}
private function toRGB(argb:uint):uint{
var rgb:uint = 0;
argb = (argb & 0xFFFFFF);
return rgb;
}
إذا كان يمكن تمثيل ألفا مع 8 بت، فمن الممكن. مجرد خريطة كل منطقة من قيمة Argb 32 بت الخاص بك للمتغير المقابل، على سبيل المثال
0x0abcdef1.
ألفا - 0x0a.
أحمر - 0xbc.
الأخضر - 0xde.
الأزرق - 0xf1.
private function combineARGB(a:uint,r:uint,g:uint,b:uint):uint {
return ( (a << 24) | ( r << 16 ) | ( g << 8 ) | b );
}
لا أستطيع حقا إضافة أي شيء آخر إلى الإجابات الممتازة أعلاه، ومع ذلك وضعت أكثر بساطة، فإن قيم ألفا هي آخر رقمين في uint، على سبيل المثال
//white
var white:uint = 0xFFFFFF;
//transparent white
var transparent:uint = 0xFFFFFFFF;
مقياس كالمعتاد، 00 = 1 FF = 0.
أتمنى أن يساعدك هذا