就拿游戏的那种技能图片来说吧,把鼠标移到技能上的时候,技能的图片显示高亮
我查了一下,好象是可以设置Graphics的高亮。不知道怎么设置,是方法还是属性。
请各位高手指点,谢谢

解决方案 »

  1.   

    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;
        }
      

  2.   

    感谢LorenLiu,我试了一下,如果没有图片的picturebox可以变,但是有图片的不行。
      

  3.   

    感谢dylike,这样弄我知道,但是工作量太大了,我一个技能图吧,还要做两个配合的图片比较麻烦,我就是想问问有没有稍微简单点的,比如就用Graphics类来处理那种 条件不够(红色)和不能用的(黑色)的亮度.不知道Graphics类能不能去色,像PS那种把图色去了就黑了...
      

  4.   


    怎么会不行呢?这个是我的效果图,前面是mouse在pictureBox外面的,后面是Mouse进入的,我把进入后的颜色从黑色改成红色了
      

  5.   


    事实上我恰恰是为了方便才直接用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;
    } }
    }
      

  6.   

    看来只有用dylike的方法了,做3个放一起,用的时候切割。感谢各位高手的帮助哈。