【问题标题】:How can I create bitmaps (in C)?如何创建位图(在 C 中)?
【发布时间】:2010-12-25 00:25:30
【问题描述】:

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

【问题讨论】:

  • 从头开始创建位图还是通过库创建位图?
  • 你应该学习BITMAP文件的结构..然后创建一个位图就不难了,就像填充文件头后玩比特一样..

标签: c image-processing bitmap


【解决方案1】:

内存中的位图如下所示:

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】:

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

    【讨论】:

      【解决方案3】:

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

      另一个流行的库是GD

      【讨论】:

        【解决方案4】:

        简单的答案是使用适当的库。合适的库取决于您使用的平台。在 GUI 平台上,GUI API/框架将包括这些设施。

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

          • 最后一个链接需要用户名+密码吗?
          【解决方案6】:

          术语“位图”有点笼统,除非您特别指的是Windows BMP

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

            • 我查看了 100 页的 API 手册,但我不确定这是否是入门有困难的人的来源...
            猜你喜欢
            • 2020-12-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多