Code

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;

namespace Eagle.CertificatePrintingSystem.Interface.ChangTianKeJiInterface
{
    public class ImageUtil
    {
        public static Image GetImage(Image image)
        {
            // 高度和宽度
            int height = image.Height;
            int width = image.Width;

            // 生产背景透明和内容透明的图片
            Bitmap bitmap = new Bitmap(image);
            //bitmap.SetResolution(72, 72);
            Graphics graphics = Graphics.FromImage(bitmap);
            graphics.DrawImage(bitmap, 0, 0);



            int alpha = 0; // 图片透明度
                           // 外层遍历是Y轴的像素

            for (int y = 0; y < bitmap.Height; y++)
            {
                // 内层遍历是X轴的像素
                for (int x = 0; x < bitmap.Width; x++)
                {
                    int rgb = bitmap.GetPixel(x, y).ToArgb();
                    // 对当前颜色判断是否在指定区间内
                    if (colorInRange(rgb))
                    {
                        alpha = 0;
                    }
                    else
                    {
                        // 设置为不透明
                        alpha = 255;
                    }
                    // #AARRGGBB 最前两位为透明度
                    rgb = (alpha << 24) | (rgb & 0x00ffffff);
                    bitmap.SetPixel(x, y, Color.FromArgb(rgb));
                }
            }

            // 绘制设置了RGB的新图片,这一步感觉不用也可以只是透明地方的深浅有变化而已,就像蒙了两层的感觉
            //graphics.DrawImage(bitmap, 0, 0);

            // 生成图片为PNG
            return bitmap;

        }

        //色差范围0~255
        public static int color_range = 190;

        // 判断是背景还是内容
        public static bool colorInRange(int color)
        {
            int red = (color & 0xff0000) >> 16;// 获取color(RGB)中R位
            int green = (color & 0x00ff00) >> 8;// 获取color(RGB)中G位
            int blue = (color & 0x0000ff);// 获取color(RGB)中B位

            if (red == 0 && green == 0 && blue == 0)
            {
                return true;
            }

            // 通过RGB三分量来判断当前颜色是否在指定的颜色区间内
            if (red >= color_range && green >= color_range && blue >= color_range)
            {
                return true;
            };
            return false;
        }
    }
}

最后修改于 2022-01-03 22:03:06
上一篇