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

时间:2011-02-04 03:24:41

标签: delphi graphics

鉴于图像(格式是问题的一部分),我希望能够将其转换为我的“格式”。我的格式是,例如,只是一个简单的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作为我的开发语言。

由于

杰森

1 个答案:

答案 0 :(得分:3)

开箱即用,您可以使用Delphi加载一些不同的图像格式(BMP,JPG,PNG,GIF,我认为这些日子也是如此)。然后有很多第三方选项可用于支持其他图像类型。

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

bmp.Width:=sourecimage.Width;
bmp.Height:=sourceimage.Height;
bmp.PixelFormat:=pf24bit;
bmp.Canvas.Draw(0,0,sourceimage);

虽然这可能不是最有效的方法,但它会在内存中显示已知格式的图像,您只需要担心一种使用它的方法,而不是编码不同的格式。

您现在有2个访问图像信息的选项: - 像素属性(这很慢,但很容易理解) - Scanlines属性(速度快但使用起来有点复杂)

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

现在您已经获得了像素,您需要找出将像素定义为" ON"什么将像素定义为" OFF"。为此,我认为你必须选择一种颜色来代表" OFF"像素(例如白色 - $ FFFFFF)所以,如果一个像素是那个颜色,那么它就会关闭,否则就会打开。

如果不太了解你是什么,并且真正想要实现的目标,那就更难了。你需要性能还是简单?你真的需要你自己的结构,或者只是Bitmap数据(实际上是一个二维数组)足够好。

还有一个重要的注意事项。使用JPG文件并不好。 JPG使用近似颜色,没有办法(我知道)你可以保证在压缩/解压缩图像后将加载什么颜色。你的" OFF"像素可能是"几乎是白色"我们无法保证他们会是白色的"。