سؤال

في الكامل .NET framework يمكنك استخدام اللون.FromArgb() طريقة لخلق لون جديد مع مزج ألفا, مثل هذا:

Color blended = Color.FromArgb(alpha, color);

أو

Color blended = Color.FromArgb(alpha, red, green , blue);

ومع ذلك في الاتفاق الإطاري (2.0 على وجه التحديد) ، أي من تلك الأساليب المتاحة, يمكنك فقط الحصول على:

Color.FromArgb(int red, int green, int blue);

و

Color.FromArgb(int val);

أول واحد ، ومن الواضح أن لا يتركك حتى أدخل قيمة ألفا ، ولكن وثائق الأخير يدل على أن "فال" هو 32bit ARGB القيمة (كما 0xAARRGGBB بدلا من معيار 24bit 0xRRGGBB) ، لذلك فمن المنطقي أن يمكنك فقط بناء ARGB قيمة ونقله إلى وظيفة.حاولت هذا مع ما يلي:

private Color FromARGB(byte alpha, byte red, byte green, byte blue)
{
    int val = (alpha << 24) | (red << 16) | (green << 8) | blue;
    return Color.FromArgb(val);
}

ولكن بغض النظر عن ما أقوم به ، مزج ألفا لم يعمل فإن اللون الناتج دائما التعتيم الكامل ، حتى عند تحديد قيمة ألفا إلى 0.

وقد أي شخص حصل هذا العمل على الاتفاق الإطار ؟

هل كانت مفيدة؟

المحلول

على ما يبدو, انها ليست بهذه البساطة ، ولكن لا يزال من الممكن, إذا كان لديك ويندوز موبايل 5.0 أو أحدث.

نصائح أخرى

على ما يبدو انها ليست تماما أن بسيطة ولكن لا يزال ممكنا ، إذا كنت لدي ويندوز موبايل 5.0 أو أحدث.

واو...بالتأكيد لا يستحق كل هذا العناء إذا كان يجب أن أضع كل هذا الرمز في (و هل الأصلية interop!) من الجيد أن نعرف على الرغم شكرا على الرابط.

هناك موقع codeplex هناك يبدو أن القيام رفع الأحمال الثقيلة من interop com لك:

وأغتنم هذه المدونة و أود أن أضيف هذا

device.RenderState.AlphaBlendEnable = true;
device.RenderState.AlphaFunction = Compare.Greater;
device.RenderState.AlphaTestEnable = true;
device.RenderState.DestinationBlend = Blend.InvSourceAlpha;
device.RenderState.SourceBlend = Blend.SourceAlpha;
device.RenderState.DiffuseMaterialSource = ColorSource.Material;

في تهيئة روتينية وأنها تعمل بشكل جيد جدا, شكرا لك

CE 6.0 لا يدعم مزج ألفا.WM 5.0 وما فوق ذلك ، ولكن ليس من خلال .صافي را, سوف تحتاج إلى P/استدعاء GDI الاشياء للقيام بذلك.هناك حلول جاهزة هناك ، ومع ذلك ، إذا كنت ترغب يمكنني أن الروابط غدا في المكتب.أنا يجب أن أعمل مع CE 6.0 حاليا حتى لا يكون لهم في ذهني.

إذا كنت تستخدم CE 6.0 يمكنك استخدام الزائفة الشفافية من خلال حجز الشفافية لون الخلفية (مثلا ، ff00ff أو شيء similiarly القبيح) واستخدام ذلك في الصور الخاصة بك على المناطق الشفافة.ثم والديك ضوابط يجب تنفيذ واجهة بسيطة التي تسمح إعادة رسم الجزء ذي الصلة على ابنتك ضوابط' الرسومات العازلة.لاحظ أن هذا سوف لا تعطيك صحيح "قناة ألفا" بل مجرد من الصعب على الخروج الثنائية نوع من الشفافية.

انها ليست سيئة كما يبدو.نلقي نظرة على OpenNETCF ImageButton بالنسبة للمبتدئين.إذا كنت تنوي استخدام هذا الأسلوب ، لدي إلى حد ما نسخة موسعة من بعض ضوابط بسيطة مع هذه التقنية حول الكذب إذا كنت مهتما.

واحدة إضافية العيب هو أن هذه التقنية تعتمد على الوالدين مراقبة تنفيذ واجهة خاصة ، داوجثير ضوابط استخدامه في الرسم.حتى مع مغلقة المصدر مكونات (أيأيضا الأسهم winforms مكونات) كنت خارجا من الحظ.

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