【发布时间】:2014-12-23 13:43:07
【问题描述】:
我目前正在开发一个生成 mandelbrot 集的程序。虽然我能够对集合进行编码,但我不知道如何使用 C 生成图像。我必须写入新文件吗?我需要一个特殊的程序来画画吗?我必须使用任何库或函数吗? 我在大学的介绍 C 方面有一个学期的经验。如果有帮助,我正在使用 MinGW 和 eclipse。
谢谢
【问题讨论】:
标签: c eclipse image mandelbrot
我目前正在开发一个生成 mandelbrot 集的程序。虽然我能够对集合进行编码,但我不知道如何使用 C 生成图像。我必须写入新文件吗?我需要一个特殊的程序来画画吗?我必须使用任何库或函数吗? 我在大学的介绍 C 方面有一个学期的经验。如果有帮助,我正在使用 MinGW 和 eclipse。
谢谢
【问题讨论】:
标签: c eclipse image mandelbrot
你可以使用 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
基本上,除非您输出一种非常基本的文件格式,否则您将需要使用某种库。
【讨论】:
很久以前,我编写了这段代码来从 (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);
}
创建的文件很大,所以可以使用一些库将图像转换为其他格式。
【讨论】: