【问题标题】:How to generate mosaic picture from image file?如何从图像文件生成马赛克图片?
【发布时间】:2017-08-31 15:53:16
【问题描述】:

我有一个像左图这样的源图像和一组像右图这样的元素:Source Image And Elements...

..我需要生成像this这样的马赛克图片。

但是直到现在我还没有使用图像,我不知道我应该从哪里开始。

我用 C# 工作了几年,但你可以举出其他类似语言的例子。

【问题讨论】:

  • 首先,您需要一种可以生成模式的算法。之后画出来比较简单。
  • 谷歌搜索“图像马赛克算法”会得到很多有趣的结果
  • 谢谢,但算法对我来说并不是一个大问题,就像搜索它的实现工具一样。我在上面写道,这是我第一次使用图像和图形。我可能需要 C#(?)中可用的选择工具的帮助来分析源图像,将其从集合中分割成元素并显示马赛克(如果用户可以像真正的马赛克一样在生成后手动编辑它会很棒)。有什么想法吗?
  • 你是否总是有一个像你给定的起始图像一样的图像,它对于最小单位具有相同的颜色?就像,在您的起始图像中,您有大约 10x10 像素的正方形,颜色相同,代表最小的构建块。如果情况总是如此,您只需要找到一种算法将一个颜色平面划分为您的构建块。如果情况并非总是如此,那么您必须首先将一个 10x10 不同颜色像素的正方形区域合并为所有像素的一种纯色,然后让算法在修改后的起始图像上运行。

标签: c# image algorithm mosaic


【解决方案1】:

您提供的结果图像显然是 ministeck 模式 - 在 2011 年,他们有一个可下载的软件,似乎可以满足您的需求。 (ministeck 不再直接提供,但似乎pfci.de 仍然提供下载)。

因此,如果您只是想从给定的图像中生成用于 ministeck 的模式,请使用他们的软件。如果你追求一种算法来实现不同的东西,这将无济于事。

编辑

好的,如果您在分析图像后,您需要将其加载到这样的对象中:

using(Bitmap b = new Bitmap(yourFileName))
{
  MessageBox.Show(string.Format("image size {0} by {1} pixels", b.Width, b.Height));
  MessageBox.Show(string.Format("color of pixel (100,100) is {0}", b.GetPixel(100, 100).ToString()));
}

Bitmap 对象有几个propertiesmethods,可以帮助您分析图像内容。试试这个以开始分析您的图像,不要忘记事后处理您的位图或将其包装到 using 语句中,如上所示...

【讨论】:

  • 不,我只需要使用我定义的元素和颜色。另外我认为大多数现有程序都有不友好的 gui。对我来说,自己编写它来学习一些关于在 C# 中处理图像和图形的知识会很有趣。
  • 一些替代软件是Perro Ministeck Creator,但它也很讨厌。 =(
  • 非常感谢。但是,我考虑了一下并决定尝试将 WPF 用于我的目的。此外,我发现了一个使用graphics in WPF 的好例子。另外,我对 XAML 的经验很少。
猜你喜欢
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 2011-10-10
  • 2012-08-28
  • 2021-10-27
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
相关资源
最近更新 更多