⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pseudocolordialog.cs

📁 一个C#开发的类似PHOTOSHOP的软件,用到了很多图形算法.
💻 CS
字号:
using System;
using System.Windows.Forms;
using System.Drawing;
using PhotoSprite.ImageProcessing;

namespace PhotoSprite.Dialog
{
  public partial class PseudoColorDialog : Form
  {
    private Canvas canvas = null;
    Bitmap srcImage = null;

    Color[] colorTable = new Color[16];

    /// <summary>
    /// 获取色彩映射表
    /// </summary>
    public Color[] ColorTable
    {
      get
      {
        return colorTable;
      }
    }

    public PseudoColorDialog(Canvas parent)
    {
      InitializeComponent();

      this.canvas = parent;
      this.srcImage = this.canvas.Image;
    }

    private void PseudoColorDialog_Load(object sender, EventArgs e)
    {
      // 初始化色彩映射表
      colorTable[0] = Color.FromArgb(0x00, 0x00, 0x00);
      colorTable[1] = Color.FromArgb(0x00, 0x00, 0x55);
      colorTable[2] = Color.FromArgb(0x00, 0x55, 0x00);
      colorTable[3] = Color.FromArgb(0x55, 0x00, 0x00);
      colorTable[4] = Color.FromArgb(0x3F, 0x3F, 0x3F);
      colorTable[5] = Color.FromArgb(0x55, 0x00, 0x55);
      colorTable[6] = Color.FromArgb(0x00, 0x00, 0xFF);
      colorTable[7] = Color.FromArgb(0x55, 0x55, 0x00);
      colorTable[8] = Color.FromArgb(0x00, 0xFF, 0x00);
      colorTable[9] = Color.FromArgb(0xFF, 0x00, 0x00);
      colorTable[10] = Color.FromArgb(0x80, 0x80, 0x80);
      colorTable[11] = Color.FromArgb(0x00, 0xFF, 0xFF);
      colorTable[12] = Color.FromArgb(0xFF, 0xFF, 0x00);
      colorTable[13] = Color.FromArgb(0xFF, 0xFF, 0xFF);
      colorTable[14] = Color.FromArgb(0x00, 0x55, 0x55);
      colorTable[15] = Color.FromArgb(0xFF, 0x00, 0xFF);

      // 初始化面板背景色
      this.label11.BackColor = colorTable[0];
      this.label12.BackColor = colorTable[1];
      this.label13.BackColor = colorTable[2];
      this.label14.BackColor = colorTable[3];
      this.label21.BackColor = colorTable[4];
      this.label22.BackColor = colorTable[5];
      this.label23.BackColor = colorTable[6];
      this.label24.BackColor = colorTable[7];
      this.label31.BackColor = colorTable[8];
      this.label32.BackColor = colorTable[9];
      this.label33.BackColor = colorTable[10];
      this.label34.BackColor = colorTable[11];
      this.label41.BackColor = colorTable[12];
      this.label42.BackColor = colorTable[13];
      this.label43.BackColor = colorTable[14];
      this.label44.BackColor = colorTable[15];

      UpdateCanvas();
    }

    private void colorTableRadioButton_CheckedChanged(object sender, EventArgs e)
    {
      this.groupBox.Enabled = this.colorTableRadioButton.Checked;
      UpdateCanvas();
    }

    private void btnCancel_Click(object sender, EventArgs e)
    {
      this.canvas.Image = (Bitmap)srcImage.Clone();
    }

    private void ChangeBackColor( System.Windows.Forms.Label sender)
    {
      if (colorDialog.ShowDialog() == DialogResult.OK)
      {
        // 将面板背景色设为指定色
        sender.BackColor = colorDialog.Color;

        // 将色彩表设为指定色
        string RowCol = sender.Name.Substring(sender.Name.Length - 2);
        int iRowCol = Convert.ToInt32(RowCol);
        int idx = (iRowCol / 10 - 1) * 4 + (iRowCol % 10 - 1);
        colorTable[idx] = colorDialog.Color;

        UpdateCanvas();
      }
    }

    private void UpdateCanvas()
    {
      Bitmap dstImage = new Bitmap(srcImage.Width, srcImage.Height);
      Adjustment a = new Adjustment();

      if (this.curveRadioButton.Checked)
      {
        dstImage = a.PseudoColor((Bitmap)srcImage.Clone());
      }
      else
      {
        dstImage = a.PseudoColor((Bitmap)srcImage.Clone(), this.ColorTable);
      }

      RegionClip rc = new RegionClip(this.canvas.SelectedRegion);
      dstImage = rc.Replace((Bitmap)srcImage.Clone(), dstImage);

      this.canvas.Image = dstImage;
    }

    private void label11_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label12_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label13_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label14_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label21_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label22_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label23_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label24_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label31_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label32_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label33_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label34_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label41_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label42_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label43_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }

    private void label44_Click(object sender, EventArgs e)
    {
      ChangeBackColor((System.Windows.Forms.Label)sender);
    }


  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -