سؤال

وايم محاولة توليد مربع صغير من 32 إلى 32 بكسل مع 10 في 10 الفجوة شفافة squareish في الوسط.

وهذا ما لدي حتى الآن:

private Image CreatePicture(){
    // Create a new Bitmap object, 32 x 32 pixels in size
    Bitmap canvas = new Bitmap(32,32,System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
    for(int i=10;i<21;i++){
        for(int p=10;p<21;p++){
            canvas.SetPixel(i,p,Color.Lime);
        }
    }
    canvas.MakeTransparent(Color.Lime);
    // return the picture
    return canvas;
}

وانها لمن الخام ولن يكون الأخير "الإصدار الأمثل" لمجرد سيناريو تجريبي الخام. المشكلة هي صورة عاد لا الشفافية بدلا من ذلك لمجرد مربع رمادي: (

وأي عن تقديره للمساعدة.

ومايكل

وUPDATE: لقد قمت بتحديث البرنامج النصي مع PixelFormat تعيينها إلى شكل ألفا RGB التي تقبل الواقع دون erroring في وقت التشغيل. على الرغم من الآن إذا كنت إزالة "canvas.MakeTransparent (Color.Lime)؛" خط فإنه يظهر مربع الجير في منتصف مع انها فقط يظهر مربع رمادي نفس لون خلفية رمادية. لذلك يبدو كما لو يتم الاعتراف الشفافية فقط لا implimenting الشفافية!

private Bitmap CreatePicture(){
    // Create a new Bitmap object, 50 x 50 pixels in size
    Bitmap canvas = new Bitmap(82,82,System.Drawing.Imaging.PixelFormat.Format32bppArgb);

    for(int i=10;i<71;i++){
        for(int p=10;p<71;p++){
            canvas.SetPixel(i,p,Color.Lime);
        }
    }
    canvas.MakeTransparent(Color.Lime);
    // return the picture
    return canvas;
}
هل كانت مفيدة؟

المحلول

وهذا يعتمد على كيفية الذهاب لاستخدام أو عرض الصورة. PNG و GIF هما تنسيقات الملفات التي تدعم الشفافية.

لإعداد نقطية من الشفافية، وأنا استخدم:

وGraphics.FromImage (صورة نقطية) .FillRectangle (Brushes.Transparent، ...) لتعيين ناحية أردت شفافة قدر، ثم حفظ الملف بها باعتبارها PNG للحصول على صورة مع الشفافية.

وكما أنني حاولت طريقة MakeTransparent واجهت مشاكل، وكان Brushes.Transparent الحل الذي يعمل لحالتي.

وهذا الأمل يمنحك اتجاه للنظر في.

وملاحظة أخيرة، وأنا إنشاء كائن صورة نقطية مع العرض والارتفاع فقط، وأنا لم تحدد تنسيق بكسل أو أيا كان أن يسمى أي نقطية = جديد نقطية (العرض والارتفاع)؛

نصائح أخرى

[...]Format16bppRgb555

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

وربما كنت بحاجة إلى تغيير شكل صورة لFormat16bppArgb1555.

والآن، كنت تستخدم Format32bppArgb أو Format16bppRgb555، وهو 16 بت لكل بكسل مع أي معلومات ألفا. الشفافية تتطلب قناة ألفا أو ألفا قليلا ليكون حاضرا.

وبلدي لا أنت فقط SetPixel() إلى اللون .Transparent ؟ بدلا من Color.Lime ثم MakeTransparent؟ وكما لاحظ آخرون. كنت في حاجة الى تنسيق بكسل مع قناة ألفا.

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

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