C# Graphics类如何设置图片高两 就拿游戏的那种技能图片来说吧,把鼠标移到技能上的时候,技能的图片显示高亮我查了一下,好象是可以设置Graphics的高亮。不知道怎么设置,是方法还是属性。请各位高手指点,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 pictureBox的属性中,设置sizemode为StretchImage,设置padding为3,3,3,3,BackColor为自定义的一个颜色,比如黑色然后设置Image属性为你需要的图片,这样图片就在pictureBox中出现,并且周围有3个像素的黑框。之后参考下面的代码当鼠标移入时黑框变白框public partial class Form1 : Form { public Form1() { InitializeComponent(); pictureBox1.MouseEnter += new EventHandler(pictureBox1_MouseEnter); pictureBox1.MouseLeave += new EventHandler(pictureBox1_MouseLeave); } void pictureBox1_MouseLeave(object sender, EventArgs e) { pictureBox1.BackColor = backColor; } void pictureBox1_MouseEnter(object sender, EventArgs e) { backColor = pictureBox1.BackColor; pictureBox1.BackColor = Color.White; } private Color backColor; } 感谢LorenLiu,我试了一下,如果没有图片的picturebox可以变,但是有图片的不行。 感谢dylike,这样弄我知道,但是工作量太大了,我一个技能图吧,还要做两个配合的图片比较麻烦,我就是想问问有没有稍微简单点的,比如就用Graphics类来处理那种 条件不够(红色)和不能用的(黑色)的亮度.不知道Graphics类能不能去色,像PS那种把图色去了就黑了... 怎么会不行呢?这个是我的效果图,前面是mouse在pictureBox外面的,后面是Mouse进入的,我把进入后的颜色从黑色改成红色了 事实上我恰恰是为了方便才直接用PS做的,因为这涉及一个效率问题.直接对图像进行操作也是可以的,虽然我并不建议这么做,就提供个思路吧.using Microsoft.VisualBasic;using System;using System.Collections;using System.Collections.Generic;using System.Data;using System.Diagnostics;using System.Drawing.Imaging;public class LightImage{ /// <summary> /// 源图 /// </summary> /// <param name="B"></param> /// <param name="Lightpcnt">要增加亮度的百分比</param> /// <returns></returns> /// <res></res> public Bitmap GetLtImg(Bitmap B, double Lightpcnt) { try { BitmapData bmpDATA = new BitmapData(); Bitmap tmpB = new Bitmap(B); bmpDATA = tmpB.LockBits(new Rectangle(0, 0, tmpB.Width - 1, tmpB.Height - 1), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); int j = 0; byte[] BTS = new byte[bmpDATA.Stride * 4 + 1]; System.Runtime.InteropServices.Marshal.Copy(bmpDATA.Scan0, BTS, 0, BTS.Length - 1); for (int I = 0; I <= BTS.Length - 4; I += 4) { j = BTS[I] + BTS[I] * Lightpcnt; BTS[I] = (j >= 255 ? 255 : j); j = BTS[I + 1] + BTS[I + 1] * Lightpcnt; BTS[I + 1] = (j >= 255 ? 255 : j); j = BTS[I + 2] + BTS[I + 2] * Lightpcnt; BTS[I + 2] = (j >= 255 ? 255 : j); } System.Runtime.InteropServices.Marshal.Copy(BTS, 0, bmpDATA.Scan0, BTS.Length - 1); tmpB.UnlockBits(bmpDATA); if (tmpB != null) { return tmpB; } else { return null; } } catch { return null; } }} 看来只有用dylike的方法了,做3个放一起,用的时候切割。感谢各位高手的帮助哈。 windows服务中使用System.Timers.Timer计时器,事件不能触发问题 for循环动态创建变量 C#中调用c生成dll问题 一个关于nhibernate连接池的问题 使用stopWatch的问题 更新了数据库,下一次打开保存的数据没有了??/ 关于调试的简单问题 谢谢帮助 急死了,项目要求后天提交,却碰到这样一个调试错误@!@@ C#的数据库问题??? 请教自动登陆网页的winform程序,高分! 发帖求一个模拟的考试系统 C# listview数据添加
然后设置Image属性为你需要的图片,这样图片就在pictureBox中出现,并且周围有3个像素的黑框。之后参考下面的代码当鼠标移入时黑框变白框
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); pictureBox1.MouseEnter += new EventHandler(pictureBox1_MouseEnter);
pictureBox1.MouseLeave += new EventHandler(pictureBox1_MouseLeave);
} void pictureBox1_MouseLeave(object sender, EventArgs e)
{
pictureBox1.BackColor = backColor;
} void pictureBox1_MouseEnter(object sender, EventArgs e)
{
backColor = pictureBox1.BackColor;
pictureBox1.BackColor = Color.White;
} private Color backColor;
}
怎么会不行呢?这个是我的效果图,前面是mouse在pictureBox外面的,后面是Mouse进入的,我把进入后的颜色从黑色改成红色了
事实上我恰恰是为了方便才直接用PS做的,因为这涉及一个效率问题.
直接对图像进行操作也是可以的,虽然我并不建议这么做,就提供个思路吧.using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Drawing.Imaging;public class LightImage
{
/// <summary>
/// 源图
/// </summary>
/// <param name="B"></param>
/// <param name="Lightpcnt">要增加亮度的百分比</param>
/// <returns></returns>
/// <res></res>
public Bitmap GetLtImg(Bitmap B, double Lightpcnt)
{
try {
BitmapData bmpDATA = new BitmapData();
Bitmap tmpB = new Bitmap(B);
bmpDATA = tmpB.LockBits(new Rectangle(0, 0, tmpB.Width - 1, tmpB.Height - 1), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
int j = 0;
byte[] BTS = new byte[bmpDATA.Stride * 4 + 1];
System.Runtime.InteropServices.Marshal.Copy(bmpDATA.Scan0, BTS, 0, BTS.Length - 1);
for (int I = 0; I <= BTS.Length - 4; I += 4) {
j = BTS[I] + BTS[I] * Lightpcnt;
BTS[I] = (j >= 255 ? 255 : j);
j = BTS[I + 1] + BTS[I + 1] * Lightpcnt;
BTS[I + 1] = (j >= 255 ? 255 : j);
j = BTS[I + 2] + BTS[I + 2] * Lightpcnt;
BTS[I + 2] = (j >= 255 ? 255 : j);
}
System.Runtime.InteropServices.Marshal.Copy(BTS, 0, bmpDATA.Scan0, BTS.Length - 1);
tmpB.UnlockBits(bmpDATA);
if (tmpB != null) {
return tmpB;
} else {
return null;
}
} catch {
return null;
} }
}