Source/ImageHelper.cs

(开头部分) 5KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;

namespace DevComponents.DotNetBar
{
#if FRAMEWORK20
    internal static class ImageHelper
#else
	internal class ImageHelper
#endif
    {
        public static Bitmap CreateReflectionImage(Image inputImage)
        {
            if (inputImage == null) return null;
            Bitmap tmp = new Bitmap(inputImage.Width, inputImage.Height, PixelFormat.Format32bppArgb);
            using (Graphics g = Graphics.FromImage(tmp))
                g.DrawImage(inputImage, 0, 0, inputImage.Width, inputImage.Height);
            Bitmap image = tmp;
            image.RotateFlip(RotateFlipType.Rotate180FlipX);

            Bitmap returnMap = new Bitmap(image.Width, image.Height,
                                   PixelFormat.Format32bppArgb);
            BitmapData bitmapData1 = image.LockBits(new Rectangle(0, 0,
                                     image.Width, image.Height),
                                     ImageLockMode.ReadOnly,
                                     PixelFormat.Format32bppArgb);
            BitmapData bitmapData2 = returnMap.LockBits(new Rectangle(0, 0,
                                     returnMap.Width, returnMap.Height),
                                     ImageLockMode.ReadOnly,
                                     PixelFormat.Format32bppArgb);
            unsafe
            {
                byte* imagePointer1 = (byte*)bitmapData1.Scan0;
                byte* imagePointer2 = (byte*)bitmapData2.Scan0;
                int strideOffset = bitmapData1.Stride - (bitmapData1.Width * 4);
                int height = bitmapData1.Height, width = bitmapData1.Width;
                for (int i = 0; i < height; i++)
                {
                    int alpha = Math.Max(195, (int)(265 * ((i + bitmapData1.Height * .4) / (float)bitmapData1.Height)));
                    for (int j = 0; j < width; j++)
                    {
                        imagePointer2[0] = imagePointer1[0];
                        imagePointer2[1] = imagePointer1[1];
                        imagePointer2[2] = imagePointer1[2];
                        imagePointer2[3] = (byte)(Math.Max(0, imagePointer1[3] - alpha));
                        //4 bytes per pixel
                        imagePointer1 += 4;
                        imagePointer2 += 4;
                    }
                    //4 bytes per pixel
                    imagePointer1 += strideOffset;
                    imagePointer2 += strideOffset;
                }
            }
            returnMap.UnlockBits(bitmapData2);
            image.UnlockBits(bitmapData1);
            return returnMap;
        }
后面还有 58 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。