问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C#怎么去了图片背景色并且可以调亮度

发布网友 发布时间:2024-09-26 06:00

我来回答

1个回答

热心网友 时间:2024-11-15 17:00

您好,软糖来回答把,我做过一个去图片背景的程序。

核心实现就3句话,主要使用Bitmap.MakeTransparent方法

Bitmap bitmap2 = new Bitmap(pictureBox1.Image);
bitmap2.MakeTransparent(背景色);
pictureBox2.Image = bitmap2;

如果想要调整亮度,就要应用到GDI的图像特性ImageAttributes了

我这里有封装好的图像特性:

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

namespace 引擎.绘图.GDI
{
    public class 图像特性 : IDisposable {
        public 图像特性() {
            M特性 = new ImageAttributes();
            M矩阵 = 原始矩阵();
        }
        public 图像特性(float 透明度) {
            M特性 = new ImageAttributes();
            M矩阵 = 原始矩阵();
            this.透明度 = 透明度;
        }
        public 图像特性(float 透明度, float gamma) {
            M特性 = new ImageAttributes();
            M矩阵 = 原始矩阵();        
            this.透明度 = 透明度;
            M特性.SetGamma(gamma, ColorAdjustType.Bitmap);
        }

        ImageAttributes M特性;
        ColorMatrix M矩阵;
        float M亮度 = 1.0f;
        bool M灰化 = false;
        public ColorMatrixFlag 灰色底纹 = ColorMatrixFlag.Default;
        public ColorAdjustType 色彩校正模式 = ColorAdjustType.Default;
        public ImageAttributes 资源 { get { return 获取资源(); } }
        protected virtual ImageAttributes 获取资源() { return M特性; }
        protected virtual void 设置资源(ImageAttributes v特性) { M特性 = v特性; }

        public ColorMatrix 矩阵 { get { return M矩阵; } } 
        public void 透明色 ( Color 颜色 ) { M特性.SetColorKey(颜色, 颜色); }
        public void 设置gamma ( float gamma ) { M特性.SetGamma(gamma, ColorAdjustType.Bitmap); }
        public void 清除色彩校正 () { M特性.SetNoOp(色彩校正模式); }
        public bool 灰化 { get { return M灰化; } set { M灰化 = value; 灰度化(value); } }
        public float 透明度 { get { return M矩阵[3, 3]; } set { M矩阵[3, 3] = value; 应用矩阵(); } }
        public float R浓度 { get { return M矩阵[0, 0]; } set { M矩阵[0, 0] = value; 应用矩阵(); } }
        public float G浓度 { get { return M矩阵[1, 1]; } set { M矩阵[1, 1] = value; 应用矩阵(); } }
        public float B浓度 { get { return M矩阵[2, 2]; } set { M矩阵[2, 2] = value; 应用矩阵(); } }
        public void 设置浓度 ( Color C )
        {
            float r = (float)C.R / 255f;
            float g = (float)C.G / 255f;
            float b = (float)C.B / 255f;
            float a = (float)C.A / 255f;
            M矩阵[0, 0] = r;
            M矩阵[1, 1] = g;
            M矩阵[2, 2] = b;
            M矩阵[3, 3] = a;
            应用矩阵();
        }
        public void 设置浓度 ( float R, float G, float B)
        {
            M矩阵[0, 0] = R;
            M矩阵[1, 1] = G;
            M矩阵[2, 2] = B;
            应用矩阵();
        }
        public float 亮度
        {
            get { return M亮度; } 
            set 
            {
                M亮度 = value;
                M矩阵[4, 0] = M亮度;
                M矩阵[4, 1] = M亮度;
                M矩阵[4, 2] = M亮度;
                应用矩阵(); 
            } 
        }

        public ColorMatrix 原始矩阵 ( )
        { 
                float[][] t颜色矩阵元素 = { 
                new float[] {1,  0,  0,  0,  0},        // red scaling factor of 2
                new float[] {0,  1,  0,  0,  0},        // green scaling factor of 1
                new float[] {0,  0,  1,  0,  0},        // blue scaling factor of 1
                new float[] {0,  0,  0,  1,  0},        // alpha scaling factor of 1
                new float[] {0,  0,  0,  0,  1}};
            return new ColorMatrix(t颜色矩阵元素);      
        }
        public void 应用矩阵 ( )  { 
            if (M矩阵 == null) { M矩阵 = 原始矩阵(); };
            M特性.SetColorMatrix(M矩阵);
        }
        public void 应用矩阵(Color C) {
            float[][] t颜色矩阵元素 = {
                new float[] { C.R / 255f,  0,  0,  0,  0},    
                new float[] {0, C.G / 255f,  0,  0,  0},     
                new float[] {0,  0, C.B / 255f,  0,  0},      
                new float[] {0,  0,  0, C.A / 255f,  0},    
                new float[] {0,  0,  0,  0,  1}};
            M矩阵 =  new ColorMatrix(t颜色矩阵元素);
            M特性.SetColorMatrix(M矩阵);
        }

        public void 清空矩阵 ( ) { M特性.ClearColorMatrix(); }

        protected void 灰度化(bool 应用)
        {
            if (应用 == true)
            {
                M矩阵[0, 0] = 0.3f; M矩阵[0, 1] = 0.3f; M矩阵[0, 2] = 0.3f;
                M矩阵[1, 0] = 0.59f; M矩阵[1, 1] = 0.59f; M矩阵[1, 2] = 0.59f;
                M矩阵[2, 0] = 0.11f; M矩阵[2, 1] = 0.11f; M矩阵[2, 2] = 0.11f;
                应用矩阵();
            }
            else 
            {
                float A = M矩阵[3, 3];
                float L0 = M矩阵[4, 0]; float L1 = M矩阵[4, 1]; float L2 = M矩阵[4, 2];
                M矩阵 = 原始矩阵();
                M矩阵[3, 3]=A;M矩阵[4, 0]=L0;M矩阵[4, 1]=L1;M矩阵[4, 2]=L2;
                应用矩阵();
            }
        }

        public void Dispose()
        {
            M特性.Dispose();
        }
    }
}

用法

首先new一个图像特性

然后图像特性.亮度= 0.1f ~ 10.0f (设置float表示十分之一或十倍亮度)

最后调用绘制图像()方法,把图像特性填进去。

//画纸是Graphics
public GraphicsUnit 绘图单位 = GraphicsUnit.Pixel;
public void 绘制图像(Bitmap 图像, int X, int Y, int 宽, int 高, 图像特性 特性)
{ 画纸.DrawImage(位图, new Rectangle(X, Y, 宽, 高), 
0, 0, 图像.Width, 图像.Height, 绘图单位, 特性.资源); }

满意请采纳,谢谢。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求电脑玩安卓游戏的方法。步骤。以及所有的文件~谢谢 。有的联系我~ 我在电脑管家软件管理下的鹰击长空2都是解压包 澳洲留学读研申请攻略 澳洲留学申请时间是什么时候 去澳大利亚上大学需要什么手续 澳洲留学申请流程时间如何? 中南财经政法大学保险精算专业介绍 黄福记小吃梅干菜扣肉饼怎么样 如何开一家梅干菜扣肉饼店,成本要多少 在照明行业LED配光曲线图怎么看 3500元预算如何组装性价比高的i3-4170/GTX750Ti电脑? 为什么同样是gtx750ti,价格不一样呢? 多肉植物叶子长黑斑 景天科长生草属的多肉植物观音莲怎么赶走寄生虫 多肉上的白虫子有毒吗? 多肉介壳虫怎么治 24年农历7月黄道吉日 农历七月的黄道吉日是哪天 2024年农历7月搬家黄道吉日 2024年农历七月十三是黄道吉日吗 2022年腊八节可以做什么 2022年腊八节的卦象是什么 2024年9月出殡黄道吉日 2024年9月哪天适合出殡 绍兴医疗卫生辅助服务人员。自我介绍公务员 怎么简单的介绍一下自己... 会算命或测字的高手进,想问点事 别人说一个字来算命这是什么算命方法? 简短4岁宝宝益智故事阅读 排名前十a股(世界前十a股) 求助贴,求大神指点.存储空间不足,无法处理此命令 ...操作一会提示服务器存储空间不足,无法处理此命令 ...error”对话框显示“存储空间不足,无法处理此命令”,但是明明内存还... Unity实现GPU光追——Part1完全镜面反射 C#两个picturebox 叠加后 要 显示透明怎么做 北斗2号卫星一箭双星 环境减灾二号卫星的发射成功,对我国航天事业有何影响? 我国发射成功环境减灾二号01组卫星,意味着什么? 精子结晶怎么回事 精子中有果冻状正常么 射出的精子有果冻状晶物是什么原因 精液呈果冻状样结晶,正常吗?影响生育吗? 烤虾的做法?烤箱 烤虾做法 烤虾如何做 夏天如何保存大米不生虫子 佳能6D+佳能35mm 1.4不小心从车子坐位上摔了下来,开机试了一下镜头... 佳能6d拍摄视频前期怎么调参数 我想买佳能EOS6D相机了,请问专家怎样识别相机和镜头是没有使用过的? canoneos及5d及mark及ii及佳能EOS及5D及Mark及II及情况怎么样 拍照搜题不下载只要用一下行了上学欺欺未考试中,李军语文,数学的平均分 ... ...想结婚需要3万元。我们两个月收入5000.想贷款。需要哪些手续等等... 芜湖那有一万元一下的贷款 鸡兔同笼,兔子比鸡少18只,足数共108只,鸡兔各有几只? 这是一道小学数学...