سؤال

في 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.

أتمنى أن يساعدك هذا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top