如何根据加载的图像中的颜色制作调色板

时间:2013-09-16 03:32:02

标签: c# winforms graphics bitmap color-palette

我尝试创建一个类似于Photoshop中的调色板或任何应用程序中的调色板,允许用户从一组通常为25px x 25px方形颜色框的颜色中进行选择。

我花时间去了解c#windows窗体和/或图形和位图对象中的位图调色板。

我要做的是创建一个不宽400px且不高于400px的调色板,它将给定图像中的所有颜色组织起来并堆叠在彼此的顶部和顶部,以产生调色板效果

到目前为止,这就是我所拥有的。

这是我的代码:

 private void Form1_Load(object sender, EventArgs e)
        {

            string path = Environment.CurrentDirectory + @"\sample.png";
            FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read);
            Image image = Bitmap.FromStream(stream);
            stream.Close();

            var colors = image.Palette.Entries;
            int cntColors = colors.Count();
            int half = cntColors / 2;

            Bitmap platte = new Bitmap(half * 50, half * 50);
            Graphics dc = Graphics.FromImage(platte);

            int currX = 0,
                currY = 0;

            for (int i = 0; i < cntColors; i++)
            {
                SolidBrush brush = new SolidBrush(Color.FromArgb(colors[i].A, colors[i].R, colors[i].G, colors[i].B));

                dc.FillRectangle(brush, currX, currY, 50, 50);

                if (currX == platte.Width)
                {
                    currX = 0;
                    currY += 50;
                }
                else
                {
                    currX += 50;
                }
            }
            pictureBox1.Image = platte;
        }

以下是此代码生成的快照,其中包含从bin文件夹中加载的图片。

enter image description here

以下是我加载和使用颜色的图片。

enter image description here

这不是针对任何具体的事情,我只是使用它并试图更好地理解如何从图像中提取所有颜色,将它们组织在调色板中,然后将调色板显示给用户

0 个答案:

没有答案