2012-12-03 3 views
1

알려진 크기, 깊이, 팔레트 등의 비트 맵 이미지가 포함 된 메모리에 배열이 있습니다. 이 배열을 사용하여 이미지의 GraphicsMagick 표현을 작성하여 BMP 헤더로이 파일을 작성하고 다른 소프트웨어에서이 파일을 볼 수있게하려고합니다.GraphicsMagick을 사용하여 메모리 스트림에 비트 맵의 ​​BMP 헤더를 만드는 방법은 무엇입니까?

지금까지 나는 이와 같은 것을 가지고있다. (중요한 라인 - 요청에 따라 전체 프로그램을 추가 할 수있다.) 첫째, 변수 :

FILE *fp_out; 
ExceptionInfo exception; 
Image *image; 
ImageInfo *image_info; 
char buffer[BUFFER_SIZE] = {0}; 
const int w = WIDTH, h = HEIGHT; 

그리고 관련 코드 :이 비트 맵의 ​​image.bmp 파일이 생성됩니다

image = ConstituteImage(w, h, "RGB", CharPixel, buffer, &exception); 
image_info = CloneImageInfo((ImageInfo *) NULL); 
fp_out = fopen("image.bmp", "wb"); 
image_info->file = fp_out; 
WriteImage(image_info, image); 

하지만, BMP 헤더가 그냥이 첫 번째 바이트 포함 이런 식으로 :

id=ImageMagick version=1.0 
class=DirectClass matte=False 
columns=74 rows=75 depth=8 
<binary data of my image> 

내가 뭘 잘못하고 있니? 어떤 문서에 초점을 맞추어야합니까? 그것은 꽤 압도적이다.

답변

1

사용 된 출력 형식이 기본 MIFF 형식이었습니다. 이 문제를 해결하기 위해, 당신은

image = ConstituteImage(w, h, "RGB", CharPixel, buffer, &exception); 
image_info = CloneImageInfo((ImageInfo *) NULL); 
fp_out = fopen("image.bmp", "wb"); 
image_info->file = fp_out; 
strcpy(image_info->magick,"BMP"); 
WriteImage(image_info, image); 

을하거나 할 수 있습니다 (더 일반적인 방법)

image = ConstituteImage(w, h, "RGB", CharPixel, buffer, &exception); 
image_info = CloneImageInfo((ImageInfo *) NULL); 
strcpy(image->filename,"image.bmp"); 
WriteImage(image_info, image);