如何自定义窗口颜色

huerlin 2009-08-11 08:43:38
就像QQ系统设置(系统设置->皮肤)里面的一样,可以设置RGB值,改变整体窗体色调
...全文
386 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
dylike 2009-08-14
  • 打赏
  • 举报
回复
解决是解决了,速度肯定很慢吧.就因为Getpixel和SetPixel.
建议使用LockBits
huerlin 2009-08-14
  • 打赏
  • 举报
回复
哈哈,解决了

我写的函数,与大家分享一下

/// <summary>
/// 传递BMP图片,改变其色调
/// </summary>
/// <param name="image">传入BMP类型图片</param>
/// <param name="whichcolor">传入"R" 或 "G" 或 "B"</param>
/// <param name="colorvalue">color值,范围0-255</param>
/// <returns>返回Image类型</returns>
public static Image ChangeImageColor(Bitmap image, string whichcolor,int colorvalue)
{
int imageWidth = image.Width;
int imageHeight = image.Height;

if (colorvalue < 0)
colorvalue = 0;
else if (colorvalue > 255)
colorvalue = 255;

// 遍历像素点 并且进行操作
for (int pixelX = 0; pixelX < image.Width; pixelX++)
{
for (int pixelY = 0; pixelY < image.Height; pixelY++)
{
Color pixelColor = image.GetPixel(pixelX, pixelY);
int r, g, b;
switch (whichcolor)
{
case "R":
r = colorvalue;
g = pixelColor.G;
b = pixelColor.B;
break;
case "G":
r = pixelColor.R;
g = colorvalue;
b = pixelColor.B;
break;
case "B":
r = pixelColor.R;
g = pixelColor.G;
b = colorvalue;
break;
default:
r = colorvalue;
g = pixelColor.G;
b = pixelColor.B;
break;
}

Color newColor = Color.FromArgb(r, g, b);
// 设定新的像素值颜色
image.SetPixel(pixelX, pixelY, newColor);
}
}
return (Image)image;
}
夏脑 2009-08-13
  • 打赏
  • 举报
回复
重写Paint,自绘窗体
robin521 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 libinguest 的回复:]
ColorDialog dg = new ColorDialog();

        private void button1_Click(object sender, EventArgs e)
        {
            dg.ShowDialog();
            this.BackColor=this.dg.Color;
        }
[/Quote]
正解!
huerlin 2009-08-13
  • 打赏
  • 举报
回复
在顶
huerlin 2009-08-13
  • 打赏
  • 举报
回复
我们老板非要这样做,

等我是老板,他是员工,我也这样使唤他,

很生气
hecker728 2009-08-13
  • 打赏
  • 举报
回复
你说的这个和窗体背景色没关系。。是对图片进行操作,像做图软件那样。改变一张图片的色调。。

这个没做过,,好像要了解图片算法,以及该图片的数据结构吧,。
huerlin 2009-08-13
  • 打赏
  • 举报
回复
对不上呀,

我的窗体都是用图片做出来的,
比如说这张图片


我想让它整体色调变成蓝色
xxxxxchener 2009-08-13
  • 打赏
  • 举报
回复
用事件控制 pictureBox1.BackColor=System.Drawing.Color.Blue;

不知道这个和你得对不对的上。
huerlin 2009-08-13
  • 打赏
  • 举报
回复
很多朋友回复可以误解了我的意思 ,可能表达的不太清楚

其实我要的功能就是这样的,
窗体上有个pictureBox, pictureBox1.image=ZZL.Properties.Resources.man
我就是想改就这个图片的色调,可能这张图片整体色调是蓝色的,我想改成绿色的,
就是这样的
云眸 2009-08-13
  • 打赏
  • 举报
回复
建议用颜色对话框来设置,方法如下:
System.Windows.Forms.ColorDialog colorDialog = new
System.Windows.Forms.ColorDialog();
colorDialog.ShowDialog();
this.ForeColor = colorDialog.Color;
huerlin 2009-08-13
  • 打赏
  • 举报
回复
谢谢 xxxxxchener

但我的窗口用的很多(按钮,窗体背景..)都是用图片做出来的,
我看QQ上程序就可以用RGB值 改变背景颜色

C#可以吗
xxxxxchener 2009-08-13
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e) 
{
this.ForeColor = System.Drawing.Color.Blue;
}
private void button1_Click(object sender, EventArgs e)
{
this.ForeColor = System.Drawing.Color.yellow;
}
private void button1_Click(object sender, EventArgs e)
{
this.ForeColor = System.Drawing.Color.write;
}

这里是每一个按钮事件。。你可以用menuStrip控件来完成。
huerlin 2009-08-13
  • 打赏
  • 举报
回复
最好有代码呀,我是新手,不太会
shenganju 2009-08-13
  • 打赏
  • 举报
回复
上面几楼的建议挺不错的,我认为你也可以使用皮肤控件,这样子的窗体的样式就用办法统一了
dylike 2009-08-13
  • 打赏
  • 举报
回复
3种方法:
1 色彩矩阵ColorMix
2 内存操作,逐像素计算
3 如果嫌速度慢就不要考虑更换色调的方法.

色调的修改:
通过逐像素计算(指上面所说的方法2),通过使用一定的公式可以指定某个颜色作为色调基点,比如用户选择蓝色,那么整个画面(指图片,非纯色)就可以换成蓝色的色调.色彩矩阵的逐像素处理速度与内存逐像素差不多,但控制色调方面,ColoMix结构比较复杂,或许你要经过一段时间的观察才能知道如何去设置它.
huerlin 2009-08-13
  • 打赏
  • 举报
回复
huerlin 2009-08-12
  • 打赏
  • 举报
回复
up
风之影子 2009-08-11
  • 打赏
  • 举报
回复
ColorDialog dg = new ColorDialog();

private void button1_Click(object sender, EventArgs e)
{
dg.ShowDialog();
this.BackColor=this.dg.Color;
}
风之影子 2009-08-11
  • 打赏
  • 举报
回复
使用ColorDialog对话框返回一个值改变。

加载更多回复(4)

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧