我希望有人能在这里给我一些指导。我现在已经开玩笑了一段时间,我无法想出任何适合我需求的东西。我是一个程序员,但不是专业人士,我没有图形经验。我正在尝试为我的妻子开发一个程序,以便更轻松地将图像传输到她的针尖图纸上。我想编写一个C#应用程序,它可以让我加载几乎任何类型的图像,并在其上面叠加“网格”。我还希望能够实现简单的“绘画”操作,例如更改网格方块的颜色,基本图像中的颜色选择器,铲斗填充等。任何建议和示例都将非常感激。
谢谢, 汤姆
答案 0 :(得分:0)
我为我的妻子实施了类似的东西。我的基本方法:
1)将图像缩小到必要像素数。例如,如果她将图像拼接在10x10 13网格画布上,则相当于130x130像素的图像。
以下是一些启动您的示例代码:
// use NearestNeighbor algorithm
public static unsafe Bitmap Reduce(Bitmap source, SizeF toSize, int threadCount)
{
Bitmap reduced = new Bitmap((int)(toSize.Width * threadCount), (int)(toSize.Height * threadCount));
using (Graphics g = Graphics.FromImage(reduced))
{
g.InterpolationMode = InterpolationMode.NearestNeighbor;
g.DrawImage(source, new Rectangle(Point.Empty, reduced.Size));
}
return reduced;
}
2)全屏显示像素化图像。这将提供类似网格的效果。
3)从DMC的纱线代码卡中显示调色板,或从图像中获取调色板(在缩小后)。然后让鼠标光标通过单击它来拾取颜色,然后将其应用到随后单击它的单元格。
这里有一些用于拾取鼠标光标的代码:
public Point GetPicturePointAtClick()
{
Point p = Cursor.Position;
Point picturePoint = previewBox.PointToClient(p);
if (Zoom != 0)
{
picturePoint.X = (int)(picturePoint.X / Zoom);
picturePoint.Y = (int)(picturePoint.Y / Zoom);
}
return picturePoint;
}
这里的想法是将点击的区域映射到缩小图像中的正确像素,数学:
Point reducedPoint =
new Point(
(int)(picPoint.X * (_reduced.Width / (float)WorkingBitmap.Width)),
(int)(picPoint.Y * (_reduced.Height / (float)WorkingBitmap.Height)));
你前面有很多代码。您是否尝试过在线定制针尖提供商?尝试其中一个网站,它们都非常好,定制是免费的: http://www.needlepaint.com/ http://www.pepitaneedlepoint.com/