【问题标题】:Rendering an image, using C [closed]使用 C 渲染图像 [关闭]
【发布时间】:2014-12-23 13:43:07
【问题描述】:

我目前正在开发一个生成 mandelbrot 集的程序。虽然我能够对集合进行编码,但我不知道如何使用 C 生成图像。我必须写入新文件吗?我需要一个特殊的程序来画画吗?我必须使用任何库或函数吗? 我在大学的介绍 C 方面有一个学期的经验。如果有帮助,我正在使用 MinGW 和 eclipse。

谢谢

【问题讨论】:

    标签: c eclipse image mandelbrot


    【解决方案1】:

    你可以使用 libpng 之类的东西来写入 PNG,但是那里会有一个学习曲线。

    http://www.libpng.org/pub/png/libpng.html

    或者您可以写入 BMP,这应该更简单。这个问题是相关的:Writing BMP image in pure c/c++ without other libraries(查看代码的第二个答案)

    或者你可以使用 SDL 然后:http://www.libsdl.org/release/SDL-1.2.15/docs/html/sdlsavebmp.html

    基本上,除非您输出一种非常基本的文件格式,否则您将需要使用某种库。

    【讨论】:

      【解决方案2】:

      很久以前,我编写了这段代码来从 (R, G, B) 值的二维数组创建一个 .bmp 图像文件:

      #include <stdio.h>
      
      struct Color
      {
          double r, g, b; /* red, green, blue values between 0 and 1 */
      };
      
      void writeBMP(struct Color **image, int height, int width, const char* filename)
      {
          unsigned int header[14];
          int i, j;
          FILE* fp = fopen(filename, "wb");
          unsigned char pad[3] = {0, 0, 0};
      
          header[0] = 0x4d420000;
          header[1] = 54 + 3 * height * width;
          header[2] = 0;
          header[3] = 54;
          header[4] = 40;
          header[5] = width;
          header[6] = height;
          header[7] = 0x00180001;
          header[8] = 0;
          header[9] = 3 * width * height;
          header[10] = header[11] = header[12] = header[13] = 0;
      
          fwrite((char*)header + 2, 1, 54, fp);
          fflush(fp);
      
          for(i = 0; i < height; i++)
          {
              for(j = 0; j < width; j++)
              {
                  unsigned char R = 255 * image[i][j].r;
                  unsigned char G = 255 * image[i][j].g;
                  unsigned char B = 255 * image[i][j].b;
                  fwrite(&B, 1, 1, fp);
                  fwrite(&G, 1, 1, fp);
                  fwrite(&R, 1, 1, fp);
              }
              fwrite(pad, width % 4, 1, fp);
          }
      
          fclose(fp);
      }
      

      创建的文件很大,所以可以使用一些库将图像转换为其他格式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-28
        • 2015-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多