C ++ : Windows에서 C ++를 사용하여 BMP 파일을 읽고 쓰는 가장 간단한 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/199403

문제

BMP 파일을로드하고 메모리에서 일부 작업을 수행하고 Windows (Win32 Native)에서 C ++를 사용하여 새 BMP 파일을 출력하려고합니다. 나는 알고있어 Imagemagick 그리고 그것은 C ++ 바인딩입니다 magick ++, 그러나 현재 다른 파일 형식이나 플랫폼에 관심이 없기 때문에이 프로젝트의 과잉이라고 생각합니다.

BMP 파일을 읽고 쓰는 코드 설정 측면에서 가장 간단한 방법은 무엇입니까? 대답은 "Magick ++를 사용하면 가장 간단합니다."일 수 있습니다.

관련 질문 : 최고의 이미지 조작 라이브러리는 무엇입니까?

도움이 되었습니까?

해결책

Windows 만 개발할 때는 보통 ATL을 사용합니다. 시마 수업

다른 팁

EasyBMP BMP 지원 만 원한다면. 나는 몇 분 안에 사용하기에 충분히 간단하지 않으며, 필요하다면 멀티 플랫폼입니다.

BMP 파일은 3 개의 구조로 구성됩니다. 비트 맵 파일 헤더 다음 비트 맵 핀포와 바이트 배열이 뒤 따릅니다.

Win32를 사용하여 BMP 파일을로드하는 가장 간단한 방법은 CreateFile, getFileSize, ReadFile 및 CloseHandle을 호출하여 파일 이미지를 메모리에로드 한 다음 버퍼에 포인터를 BitMapFileHeader에 시전하는 것입니다.

나는 거짓말, 더 간단한 방법은 loadimage를 호출하는 것입니다. LR_DIBSECTION 플래그를 전달하여 GDI가로드 된 이미지를 기본 디스플레이를 구성하는 비트 측정으로 변환하지 않도록하십시오. 이것은 DC로 선택할 수있는 HBITMAP를 얻는 이점이있어 GDI를 사용하여 온통 끌어냅니다.

그러나 저장하려면 지름길이 없습니다. BitMapFileHeader를 준비하고, 작성하고, BitMapInfo struct를 채우고, 작성한 다음 실제 픽셀 데이터를 작성해야합니다.

그만큼 cbitmap 클래스는 BMP I/O를 수행합니다.

#include <windows.h>

로드 디지

Magick ++를 사용하지 않았지만 Windows에는 Windows 이미징 구성 요소라는 라이브러리가있어 귀하의 요구에 맞을 수 있습니다.

나는 시도했다 CImage 위와 같이, 그러나 나는 단순히 BMP (또는 다른 형식)로 덤프하고 싶었던 픽셀 값으로 가득 찬 C 배열을 가지고있었습니다. CImage 그것에 대한 생성자가없고, 나는 MFC를 연결하고 싶지 않았습니다 (for CBitmap) 또는 Iwic을 추측하려고 노력하십시오.

쉬운 것은 cimg:

#include <cimg/cimg.h>
using namespace cimg_library;
//...
void SaveMyData(uint8_t *pxarray, int width, int height)
{
    CImg<uint8_t> img(pxarray, width, height);
    img.save_bmp("sav.bmp");
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top