سؤال

أحاول الحصول على صورة لعرضها بأحد الألوان التي يتم استبدالها بألفا أبيض حتى أتمكن من وضعها فوق الصور الأخرى. لقد حصلت عليه حتى أتمكن من تغيير الألوان بسهولة كافية ، لكن تغييرها لتكون شفافة هو التخلص مني. إليك الكود الخاص بي ، باستخدام C# و WPF.

    private void SetAlpha(string location)
    {
        //bmp is a bitmap source that I load from an image
        bmp = new BitmapImage(new Uri(location));
        int[] pixels = new int[(int)bmp.Width * (int)bmp.Height];
        //still not sure what 'stride' is.  Got this part from a tutorial
        int stride = (bmp.PixelWidth * bmp.Format.BitsPerPixel + 7)/8;

        bmp.CopyPixels(pixels, stride, 0);
        int oldColor = pixels[0];
        int red = 255;
        int green = 255;
        int blue = 255;
        int alpha = 0;
        int color = (alpha << 24) + (red << 16) + (green << 8) + blue;

        for (int i = 0; i < (int)bmp.Width * (int)bmp.Height; i++)
        {
            if (pixels[i] == oldColor)
            {
                pixels[i] = color;
            }
        }
            //remake the bitmap source with these pixels
            bmp = BitmapSource.Create(bmp.PixelWidth, bmp.PixelHeight, bmp.DpiX, bmp.DpiY, bmp.Format, bmp.Palette, pixels, stride);
        }

    }

لدي صورتان أختبرها. Image1 يشبه ما سأعمل عليه ، ولا شفافية في الصورة الأصلية. Image2 لديه بالفعل شفافية. اعتقدت أنه سيكون من السهل الحصول على القيمة من Image2 (0x00ffffff) ولكن هذا يجعلها بيضاء وتغطي أي صور وراءها.

كلتا الصورتين هي PNG ، والتنسيق لكليهما هو BGR32.

هل يعرف أي شخص كيفية جعل الصورة شفافة؟

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

المحلول

ماذا عن استخدام BGRA32?

تأكد أيضًا من أنك تفهم كيفية تمثيل اللون في الذاكرة وماذا ألفا يعني.

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