使用C渲染图像

时间:2014-12-23 03:17:45

标签: c eclipse image mandelbrot

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

由于

2 个答案:

答案 0 :(得分:3)

你可以使用类似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

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

答案 1 :(得分:1)

很久以前,我编写了这段代码,用于从(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);
}

创建的文件大小很大,因此您可以使用某些库将图像转换为其他格式。