LibGD库不工作:保存图像时崩溃

我一直在寻找JPG保存库很长一段时间的C ++,但我似乎无法得到任何工作。 现在我正在尝试使用LibGD:

什么即时做错了? 这似乎工作,但节省的崩溃。 码:

... #pragma comment(lib, "bgd.lib") #include <gd/gd.h> ... void save_test(){ gdImagePtr im; FILE *jpegout; int black; int white; im = gdImageCreateTrueColor(64, 64); black = gdImageColorAllocate(im, 0, 0, 0); white = gdImageColorAllocate(im, 255, 255, 255); gdImageLine(im, 0, 0, 63, 63, white); if(jpegout = fopen("test.jpg", "wb")){ if(im){ gdImageJpeg(im, jpegout, -1); // crash here! } fclose(jpegout); } gdImageDestroy(im); } 

我从http://www.libgd.org/releases/gd-latest-win32.zip下载了这个库

我有正确的目录中的库/包含/ bgd.dll文件等

编辑:下面的答案包括解决我的问题的代码:

 int size; char* data = (char*)gdImagePngPtr(im, &size); fwrite(data, sizeof(char), size, out); gdFree(data); 

Solutions Collecting From Web of "LibGD库不工作:保存图像时崩溃"

在尝试使用它们以确保它们都被分配之前, jpegout检查imjpegout

[编辑]这将是更好的分裂文件句柄从测试它的有效性。 你有没有尝试libgd的例子 ?

[编辑2]我下载了相同的源码等,在VS2008中建立一个项目,并得到完全相同的问题。 你可以试试这个建议 ..

关于GD的一个重要的事情是确保它是和主项目建立在同一个CRT上的,因为它使用FILE这样的结构,如果你用另一个版本的可执行文件调用一个版本的编译器来调用GD DLL,进入内存访问冲突。

在那里有一个代码片段,它修复了我的机器上的崩溃:

 /* Bring in gd library functions */ #include "gd.h" /* Bring in standard I/O so we can output the PNG to a file */ #include <stdio.h> int main() { /* Declare the image */ gdImagePtr im; /* Declare output files */ FILE *pngout, *jpegout; /* Declare color indexes */ int black; int white; /* Allocate the image: 64 pixels across by 64 pixels tall */ im = gdImageCreate(64, 64); /* Allocate the color black (red, green and blue all minimum). Since this is the first color in a new image, it will be the background color. */ black = gdImageColorAllocate(im, 0, 0, 0); /* Allocate the color white (red, green and blue all maximum). */ white = gdImageColorAllocate(im, 255, 255, 255); /* Draw a line from the upper left to the lower right, using white color index. */ gdImageLine(im, 0, 0, 63, 63, white); /* Open a file for writing. "wb" means "write binary", important under MSDOS, harmless under Unix. */ errno_t result1 = fopen_s(&pngout, "C:\\Projects\\Experiments\\LibGD\\test.png", "wb"); /* Do the same for a JPEG-format file. */ errno_t result2 = fopen_s(&jpegout, "C:\\Projects\\Experiments\\LibGD\\test.jpg", "wb+"); /* Output the image to the disk file in PNG format. */ int size; char* data = (char*)gdImagePngPtr(im, &size); fwrite(data, sizeof(char), size, pngout); gdFree(data); data = (char*)gdImageJpegPtr(im, &size, -1); fwrite(data, sizeof(char), size, jpegout); gdFree(data); /* Close the files. */ fclose(pngout); fclose(jpegout); /* Destroy the image in memory. */ gdImageDestroy(im); }