意图:有两个bmp文件,棋盘文件-board.bmp(棕色背景)、棋子文件-chess.bmp(黑棋子周围背景红色)。想用board.bmp建立一个Graphics,然后把chess.bmp绘到棋盘,最后把整个内存的图绘到PictureBox控件里。
希望得到的图像是仅仅黑色棋子在棋盘上,但实际上整个棋子的bmp都显示了,请问如何去掉棋子的红色背景?(C#做)其中PictureBox控件的Paint事件代码如下:private void picBox_Paint(object sender, PaintEventArgs e)
{
     // 从文件得到两个bmp的Image
     Image imageBoard = new Bitmap(@"board.bmp"); 
     Image imageChess = new Bitmap(@"chess.bmp");
     // 从棋盘的Image建立Graphics
     Graphics grfx = Graphics.FromImage(imageBoard);
     // 把棋子绘到棋盘里
     grfx.DrawImage(imageChess, 100, 100);
     // 绘好的图放到PictureBox控件里
     this.picBox.Image = imageBoard;
}

解决方案 »

  1.   

    用一个region,只显示region内的图片
      

  2.   

    region内应该是棋子的圆,事先找好的图片,要确定大小不易,有没有可能设置棋子图片的多余红色在PictureBox控件中为透明色?也就是有没有可能设置任意颜色在PictureBox控件中为透明色?或者某种Container(可以显示图片且能接受鼠标事件)控件可以任意设置颜色为透明色的?
      

  3.   

    如果不用PhotoShop之类的图形处理,光用程序编程能否实现?记得以前用VC++是可以实现的,但用C#就不明白该怎么处理了。
      

  4.   

    使用ImageList来保存图片,其中将ImageList的属性TransparentColor设置为红色,就是你要透明的颜色。Image imageBoard = new Bitmap(@"board.bmp"); 
    Image imageChess = imageList1.Images[0];
      

  5.   

    同意liangxf0022所说
    当然你也可以遍历棋子中的每个像素点,把红颜色的a通道设为透明
    接分
      

  6.   

    如果你把BMP  转为用 GIF 并直接将红色背景变为透明。直接画就行了,我以前有试过相似的。
      

  7.   

    把棋子做成PNG格式, 再把图片背景设为透明直接用就是...不必搞得那么麻烦...