如何创建位图(在C中)?

时间:2009-12-09 21:14:17

标签: c image-processing bitmap

我想知道如何在C和C之间导入和导出位图。我基本上不知道从哪里开始。

7 个答案:

答案 0 :(得分:2)

您是否看过ImageMagick的C API包装器MagickWand?如果您想仔细阅读,请 Here's 文档。

答案 1 :(得分:2)

内存中的位图看起来与此类似:

struct Image {
    int width;
    int height;
    char *data;    // 1 byte per channel & only 1 channel == grayscale
}

struct Image theImage;
theImage.width = 100;
theImage.height = 100;
theImage.data = malloc(sizeof(char) * theImage.width * theImage.height);

至于导入和导出,有一些非常简单的文件格式,请看BMP。对于更复杂的格式,最好使用已有的库。

大多数框架已经为最常见的文件格式提供了加载/保存方法。如果您正在寻找轻量级库,可以查看SDL

答案 2 :(得分:1)

我喜欢将SDL与虚拟驱动程序一起使用。您可以像在屏幕上一样绘制到内存缓冲区,然后将其保存到PNG或SDL_image或类似的任何内容。

另一个受欢迎的图书馆是GD

答案 3 :(得分:1)

简单的答案是使用适当的库。适合的库取决于您使用的平台。在GUI平台上,GUI API / Framework将包含这些功能。

答案 4 :(得分:1)

我喜欢netpbm / pbmplus工具,虽然我通常喜欢命令行; API很有效但使用起来并不是很有趣。

这个学期我写了大量软件,供初学者用来操作图像;您可能想查看Tufts课程Machine Structure and Assembly-Language Programming的家庭作业和支持软件。

答案 5 :(得分:0)

术语“位图”有些通用,除非您具体指Windows BMP

我建议在您的平台上使用图像处理库(例如gd)。一个好的图形库具有用各种格式的图像进行输入和输出的例程。

答案 6 :(得分:0)

FreeImage很棒。我已经将它用于我自己的游戏开发工作,它支持大量的格式。以下是支持的功能和格式列表 - http://freeimage.sourceforge.net/features.html