首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将“图片”/“图像”格式转换为我自己的格式

将“图片”/“图像”格式转换为我自己的格式
EN

Stack Overflow用户
提问于 2011-02-04 11:24:41
回答 1查看 708关注 0票数 0

给定一个图像(格式是问题的一部分),我希望能够将其转换为我的“格式”。我的格式是,比如说,只是一个简单的X*Y布尔值数组,覆盖时间图像的大小,说明该特定像素是否为“开”。颜色无关紧要。我对图像格式(如BMP、JPG、GIF)一无所知,因此如果给定其中任何一种格式,是否可以读取图像以“映射”像素状态。

我猜困难可能在于确定图像中的某个特定像素是否处于“打开”状态。由于这形成了我正在创建的程序的特定部分的一部分,我可以确保用户只创建单一颜色和特定范围的图像。如通常的红、绿、黄等。

我试图实现的是让用户使用他们想要的任何图像程序(例如mspaint)来绘制他们的图像,然后保存它并在以后将其导入到我的应用程序中。

是否有任何图形格式允许我这样做?我希望我已经为我想要的东西提供了足够的信息。我将提供一个非常基本的示例。

例如:创建的图像是20,10,用户从点0,0 -> 6,0 (即7像素宽)画了一条直线。他们把它保存为BMP或JPG格式。然后,我想打开该图像,扫描它以确定是否已经绘制了某个特定的像素。因此,像素0,0 1,0 2,0 3,0 4,0 5,0 6,0将为“开”,而所有其他像素将为关。如果我必须强制他们将其保存为特定类型,我很高兴。

我使用Delphi作为我的开发语言。

谢谢

杰森

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-04 13:21:35

你可以用Delphi加载几种不同的图像格式(BMP,JPG,PNG,GIF,我想这几天也是)。然后有大量的第三方选项可用于支持其他图像类型。

将图像加载到内存后,最简单的方法就是将其转换为Tbitmap。也有几种方法可以做到这一点。但是既然你想弄乱像素,那么我会创建一个Tbitmap,并将它的像素格式设置为24位,然后我会将你加载的图像绘制到Tbitmap的画布上。

代码语言:javascript
复制
bmp.Width:=sourecimage.Width;
bmp.Height:=sourceimage.Height;
bmp.PixelFormat:=pf24bit;
bmp.Canvas.Draw(0,0,sourceimage);

虽然这可能不是最有效的方法,但它会让你在内存中得到一个已知格式的图像,你只需要考虑一种使用它的方法,而不是为不同的格式编码。

你现在有两个选项来访问图像信息:- Pixels属性(非常慢,但很容易理解)-扫描线属性(它很快,但使用起来有点复杂)

两者都允许您迭代图像中的所有像素并确定它们的颜色。

现在你已经得到了像素,你需要弄清楚什么定义一个像素为“开”,什么定义一个像素为“关”。为此,我认为你必须选择一种颜色来代表一个“关”像素(例如白色- $FFFFFF),所以如果一个像素是那个颜色,那么它就是关的,否则它就是开的。

如果不太了解你真正想要实现的是什么,就很难再往前走了。您需要性能还是简单性?你是否真的需要自己的结构,或者仅仅是位图数据(实际上是一个二维数组)就足够好了。

还有一个重要的注意事项。使用JPG文件并不好。JPG使用近似的颜色,你无法保证图像压缩/解压后会加载什么颜色(据我所知)。虽然你的“关闭”像素可能是“近乎白色”的,但不能保证它们是“完全白色”的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4894257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档