>백엔드 개발 >C++ >외부 라이브러리 없이 순수 C/C의 부울 행렬에서 단색 BMP 이미지를 만드는 방법은 무엇입니까?

외부 라이브러리 없이 순수 C/C의 부울 행렬에서 단색 BMP 이미지를 만드는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-29 17:16:10571검색

How to Create a Monochromatic BMP Image from a Boolean Matrix in Pure C/C   Without External Libraries?

외부 라이브러리 없이 순수 C/C에 BMP 이미지 작성

정보 출력이 필요한 알고리즘을 개발할 때 다양한 형식. 일반적인 형식 중 하나는 BMP 이미지입니다. 이 기사에서는 실제 요소가 흰색 픽셀로 표시되는 부울 행렬에서 단색 BMP 이미지를 생성하는 문제를 다룹니다.

BMP 헤더 구조

BMP(비트맵 Image) 파일은 헤더 섹션과 이미지 데이터로 구성됩니다. 헤더에는 이미지의 크기, 색상 심도 및 압축 형식에 대한 중요한 정보가 포함되어 있습니다. 주요 구성 요소에 대한 분석은 다음과 같습니다.

  • "BM" 서명: 파일을 BMP 이미지(2바이트)로 식별합니다.
  • 파일 크기: BMP 파일의 크기(바이트) (4바이트).
  • 픽셀 데이터로 오프셋: 파일 내 이미지 데이터의 위치(4바이트) 바이트).
  • BITMAPINFOHEADER: 너비, 높이, 색상 평면 수, 비트 심도(40바이트) 등 이미지에 대한 추가 정보를 포함합니다.

코드 부울 행렬에서 BMP 이미지를 생성하려면

다음 코드 조각은 외부 라이브러리에 의존하지 않고 부울 행렬의 BMP 이미지:

FILE *f;
unsigned char *img = NULL;
int filesize = 54 + 3*w*h;  // w and h are image width and height

// Allocate memory for image data
img = (unsigned char *)malloc(3*w*h);
memset(img,0,3*w*h);

// Fill img byte array with pixel data
for (int i = 0; i < w; i++) {
    for (int j = 0; j < h; j++) {
        int x = i, y = (h-1)-j;
        int r, g, b;  // Color components

        // Set pixel color based on matrix element
        if (matrix[i][j]) {
            r = g = b = 255;  // White pixel
        } else {
            r = g = b = 0;      // Black pixel
        }

        // Write pixel color components to image data array
        img[(x+y*w)*3+2] = (unsigned char)(r);
        img[(x+y*w)*3+1] = (unsigned char)(g);
        img[(x+y*w)*3+0] = (unsigned char)(b);
    }
}

// Set BMP header values
unsigned char bmpfileheader[14] = {'B','M', 0,0,0,0, 0,0, 0,0, 54,0,0,0};
unsigned char bmpinfoheader[40] = {40,0,0,0, 0,0,0,0, 0,0,0,0, 1,0, 24,0};

// Update file size
bmpfileheader[ 2] = (unsigned char)(filesize    );
bmpfileheader[ 3] = (unsigned char)(filesize>> 8);
bmpfileheader[ 4] = (unsigned char)(filesize>>16);
bmpfileheader[ 5] = (unsigned char)(filesize>>24);

// Update image width and height
bmpinfoheader[ 4] = (unsigned char)(       w    );
bmpinfoheader[ 5] = (unsigned char)(       w>> 8);
bmpinfoheader[ 6] = (unsigned char)(       w>>16);
bmpinfoheader[ 7] = (unsigned char)(       w>>24);
bmpinfoheader[ 8] = (unsigned char)(       h    );
bmpinfoheader[ 9] = (unsigned char)(       h>> 8);
bmpinfoheader[10] = (unsigned char)(       h>>16);
bmpinfoheader[11] = (unsigned char)(       h>>24);

// Save BMP image to file
f = fopen("img.bmp","wb");
fwrite(bmpfileheader, 1, 14, f);
fwrite(bmpinfoheader, 1, 40, f);
for (int i = 0; i < h; i++) {
    fwrite(img+(w*(h-i-1)*3), 3, w, f);
    fwrite(bmppad, 1, (4-(w*3)%4)%4, f);  // Pad to 4-byte boundary
}

// Free resources
free(img);
fclose(f);

이 코드에 설명된 단계를 따르면 부울 행렬에서 단색 BMP 이미지를 성공적으로 생성할 수 있으며 시각화 및 출력 방법을 제공합니다. 알고리즘 결과.

위 내용은 외부 라이브러리 없이 순수 C/C의 부울 행렬에서 단색 BMP 이미지를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.