bmp은 무슨 뜻인가요? BMP 파일 확장자 란 무엇입니까? bmp 확장자를 열 프로그램

BMP(영어에서 비트맵 그림)는 Microsoft에서 개발한 래스터 이미지 저장 형식입니다.

BMP 형식 지원이 Windows 및 OS/2 운영 체제에 통합되어 있기 때문에 수많은 프로그램이 BMP 형식으로 작동합니다. BMP 파일의 확장자는 .bmp, .dib 및 .rle일 수 있습니다. 또한 이 형식의 데이터는 바이너리 RES 리소스 파일과 PE 파일에 포함됩니다.

Microsoft는 또한 필요에 따라 BMP와 유사한 구조를 가진 ICO 및 CUR 형식을 개발했습니다. 또한 이 형식의 구조는 GDI 하위 시스템의 일부 WinAPI 함수에서 사용됩니다.

이 형식의 색상 깊이는 픽셀당 1, 2, 4, 8, 16, 24, 32, 48비트일 수 있지만 픽셀당 2비트는 공식적으로 지원되지 않습니다. 이 경우, 16비트 미만의 색상 심도에 대해서는 심도가 24비트인 풀 컬러 구성 요소가 포함된 팔레트가 사용됩니다.

BMP 형식에서는 이미지를 그대로 저장하거나 일부 일반적인 압축 알고리즘을 사용하여 저장할 수 있습니다. 특히 BMP 형식은 품질 저하 없이 RLE 압축을 지원하며 최신 운영 체제와 소프트웨어에서는 JPEG 및 PNG 사용을 허용합니다(이러한 형식은 BMP에 컨테이너로 내장되어 있음).

DIB 및 DDB

DIB 형식을 사용하는 경우 장치 독립적인 비트맵, 장치 독립적 래스터), 프로그래머는 일반 포인터를 사용하여 이미지를 설명하는 구조의 모든 요소에 액세스할 수 있습니다. 하지만 이 데이터는 항상 전용 비디오 메모리가 아닌 시스템 메모리에 저장되므로 화면을 직접 제어하는 ​​데 사용되지 않습니다. RAM의 픽셀 형식은 동일한 색상의 점을 표시하기 위해 비디오 메모리에 저장해야 하는 형식과 다를 수 있습니다. 예를 들어 DIB 형식은 24비트를 사용하여 픽셀을 지정할 수 있으며 현재 그래픽 어댑터는 16비트의 색 농도로 HiColor 모드에서 작동할 수 있습니다. 이 경우 밝은 빨간색 점은 하드웨어 독립적 형식으로 3바이트 0x0000ff로 지정되고 비디오 메모리에서는 0xF800 단어로 지정됩니다. 그림을 화면에 복사할 때 시스템은 24비트 형식의 색상 코드를 비디오 버퍼 형식으로 변환하는 데 추가 시간을 소비합니다.

파일 구조 개요

BMP 파일은 네 부분으로 구성됩니다.

  1. 파일 헤더(BITMAPFILEHEADER)
  2. 이미지 제목(BITMAPINFOHEADER, 누락되었을 수 있음) BITMAPV4HEADER(Win95, NT4.0) BITMAPV5HEADER(Win98/Me, 2000/XP)
  3. 팔레트(누락되었을 수 있음)
  4. 이미지 그 자체

비트마파일헤더

이 구조에는 파일에 있는 데이터의 유형, 크기 및 표현에 대한 정보가 포함됩니다. 크기는 14바이트입니다.

Typedef struct tagBITMAPFILEHEADER ( WORD bfType; // 파일 시작 부분에서 0바이트 오프셋 DWORD bfSize; // 파일 시작 부분에서 2바이트 오프셋, 길이 4바이트 WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits;

// 파일 시작 부분에서 10바이트 오프셋, 길이 4바이트

  • ) BITMAPFILEHEADER, * PBITMAPFILEHEADER;
  • WORD 유형은 16비트, DWORD 및 LONG 유형은 32비트, LONG 유형은 부호가 있어야 하며 바이트 순서는 리틀 엔디안으로 가정됩니다.
  • bfType - 파일 유형, 문자 "BM"(16진수: 0x42 0x4d).
  • bfSize - 전체 파일의 크기(바이트)입니다.

bfReserved1 및 bfReserved2는 예약되어 있으며 0을 포함해야 합니다.

bfOffBits - BITMAPFILEHEADER 구조의 시작부터 이미지 비트 자체까지의 오프셋(바이트)을 포함합니다.

파일 헤더 뒤

비트마인포헤더

가장 간단한 헤더 옵션입니다. Windows NT3.51 및 이전 버전의 응용 프로그램은 이 구조만 사용할 수 있습니다. 크기는 40바이트입니다.

  • 0 - Win98/Me/2000/XP에 적합합니다. 픽셀당 비트 수에 따라 JPEG 또는 PNG 형식이 결정됩니다.
  • 1 - 흑백 이미지. BITMAPINFO 구조의 bmiColors 멤버에는 두 개의 요소가 포함되어 있습니다. 이미지의 각 비트는 하나의 픽셀을 나타냅니다. 비트가 0이면 픽셀은 bmiColors 테이블의 첫 번째 요소의 색상을 가지며, 그렇지 않으면 두 번째 요소의 색상을 갖습니다.
  • 4 - 16색 이미지. 픽셀은 4비트 인덱스로 정의되며, 이미지의 각 바이트에는 2개의 픽셀에 대한 정보가 포함됩니다. 첫 번째 픽셀의 최상위 4비트, 두 번째 픽셀의 나머지 비트입니다.
  • 8 - 팔레트에는 최대 256개의 색상이 포함되며, 이미지의 각 바이트는 팔레트의 한 픽셀에 대한 인덱스를 저장합니다.
  • 16 - biCompression 필드에 BI_RGB 값이 포함되어 있으면 파일에 팔레트가 포함되어 있지 않습니다. 이미지의 2바이트마다 한 픽셀의 빨간색, 녹색, 파란색 구성 요소의 강도가 저장됩니다. 이 경우 최상위 비트는 사용되지 않으며 각 구성 요소에 0RRRRRGGGGGGBBBBB 5비트가 할당됩니다.
    biCompression 필드에 BI_BITFIELDS 값이 포함되어 있으면 팔레트는 세 가지 색상 구성 요소 각각에 대한 마스크를 정의하는 세 개의 4바이트 값을 저장합니다. 이미지의 각 픽셀은 마스크를 사용하여 색상 구성 요소를 추출하는 2바이트 값으로 표시됩니다. WinNT/2000/XP의 경우 각 구성 요소의 비트 시퀀스는 다른 구성 요소의 시퀀스와 겹치거나 교차하지 않고 연속적으로 따라야 합니다. Win95/98/Me의 경우 - 다음 마스크만 지원됩니다: 5-5-5, 여기서 파란색 구성 요소의 마스크는 0x001F, 녹색 0x03E0, 빨간색 0x7C00입니다. 5-6-5, 여기서 파란색 구성요소의 마스크는 0x001F, 녹색 0x07E0, 빨간색 0xF800입니다.
  • 24 - 팔레트가 사용되지 않습니다. 이미지의 각 3바이트는 각각 파란색, 녹색 및 빨간색 채널의 강도에 대한 1바이트인 1픽셀을 나타냅니다.
  • 32 - biCompression 필드에 BI_RGB 값이 포함되어 있으면 이미지에 팔레트가 포함되어 있지 않습니다. 이미지의 4바이트는 각각 파란색, 녹색, 빨간색 채널의 강도를 나타내는 1픽셀, 즉 1바이트를 나타냅니다. 각 쿼드의 최상위 바이트는 일반적으로 사용되지 않지만 알파 채널 데이터를 저장할 수 있습니다.
    biCompression 필드에 BI_BITFIELDS 값이 포함되어 있으면 빨간색, 녹색 및 파란색 구성 요소에 대해 3개의 4바이트 색상 마스크가 팔레트에 저장됩니다. 이미지의 각 픽셀은 4바이트로 표시됩니다. WinNT/2000: 구성 요소 마스크는 겹치거나 교차해서는 안 됩니다. Windows 95/98/Me: 시스템은 압축 없는 모드와 완전히 유사한 하나의 압축 모드만 지원합니다. BI_RGB - 각 4개 중 가장 중요한 바이트는 알파 채널로 사용되고 다음 3개는 파란색, 녹색 및 빨간색용으로 예약됩니다. 채널은 각각 0xAARRGGBB입니다.
biCompression 압축된 이미지의 압축 유형:
의미 식별자 압축
0 BI_RGB 압축되지 않은 이미지
1 BI_RLE8 8비트 이미지에 대한 RLE 압축
2 BI_RLE4 4비트 이미지에 대한 RLE 압축
3 BI_BITFIELDS 이미지가 압축되지 않은 경우 팔레트에는 빨간색, 녹색 및 파란색 구성 요소에 대한 3개의 4바이트 마스크가 포함되어 있습니다. 16비트 및 32비트 이미지에 사용됨
4 BI_JPEG Win98/Me/2000/XP: JPEG 압축
5 BI_PNG Win98/Me/2000/XP: PNG 압축
6 BI_ALPHABITFIELDS WinCE: 이미지가 압축되지 않습니다. 팔레트에는 빨간색, 녹색, 파란색 및 투명(알파 채널) 색상 구성 요소에 대한 4개의 4바이트 마스크가 포함되어 있습니다. 16비트 및 32비트 이미지에 사용됨
biSizeImage 이미지 크기(바이트)입니다. BI_RGB 이미지에는 0이 포함될 수 있습니다. Win98/Me/2000/XP: biCompression에 BI_JPEG 또는 BI_PNG가 포함된 경우 biSizeImage는 BI_JPEG 또는 BI_PNG 이미지 버퍼의 크기를 지정합니다.
biXPelsPerMeter 대상 장치의 미터당 픽셀 단위 수평 해상도입니다. 애플리케이션은 이 값을 사용하여 이미지 리소스 그룹에서 현재 장치에 가장 적합한 이미지를 선택할 수 있습니다. Microsoft에서 모니터용으로 허용하는 DPI 96의 경우 3780과 같습니다(공식 (96 / 25.4) * 1000을 사용하여 계산한 경우).
압축된 이미지에서 픽셀 배열은 BITMAPINFO 구조 바로 뒤에 오며, biClrUsed는 0 또는 실제 팔레트 크기를 포함해야 합니다.

biClrImportant 이미지를 표시하는 데 필요한 팔레트 요소 수입니다. 0이 포함되어 있으면 모든 인덱스가 동일하게 중요합니다.

BITMAPINFO 구조는 BITMAPINFOHEADER와 팔레트를 결합하여 이미지의 크기와 색상에 대한 완전한 설명을 제공합니다.

BITMAPINFO 구조에서 팔레트를 찾으려면 애플리케이션은 다음과 같이 biSize에 저장된 정보를 사용해야 합니다.

PCcolor = ((LPSTR) pBitmapInfo + (WORD) (pBitmapInfo-> bmiHeader.biSize ) ) ;

래스터는 일반적으로 수직으로 대칭된 형태로 저장됩니다. 그러나 수직으로 대칭되지 않은 형태로 래스터를 저장할 수도 있습니다. BMP의 래스터가 수직 거울 형태가 아니라는 표시는 biHeight 매개변수에 의해 지정됩니다.

비트맵V4헤더

위에서 설명한 구조의 확장된 버전입니다. Win NT 3.51 및 이전 버전에서는 BITMAPINFOHEADER 구조를 사용해야 합니다. Win98/Me/2000/XP는 BITMAPV4HEADER 구조 대신 BITMAPV5HEADER 구조를 사용할 수 있습니다.

Typedef 구조체( DWORD bV4Size; LONG bV4Width; LONG bV4Height; WORD bV4Planes; WORD bV4BitCount; DWORD bV4V4Compression; DWORD bV4SizeImage; LONG bV4XPelsPerMeter; LONG bV4YPelsPerMeter; DWORD bV4ClrUsed DW; ORD bV4ClrImportant; DWORD bV4GreenMask ; CIEXYZTRIPLE bV4Endpoints; DWORD bV4GammaBlue;

  • 구조 시작부터 bV4ClrImportant까지의 필드는 BITMAPINFOHEADER 구조의 해당 필드와 동일한 목적을 갖습니다.
  • bV4RedMask - 각 픽셀의 빨간색 구성 요소의 색상 마스크로, bV4Compression에 BI_BITFIELDS 값이 포함된 경우에만 사용됩니다.
  • bV4GreenMask - 각 픽셀의 녹색 구성 요소의 색상 마스크로, bV4Compression에 BI_BITFIELDS 값이 포함된 경우에만 사용됩니다.
  • bV4BlueMask - 각 픽셀의 파란색 구성 요소의 색상 마스크로, bV4Compression에 BI_BITFIELDS 값이 포함된 경우에만 사용됩니다.
  • bV4AlphaMask - 알파 채널 구성 요소를 정의하는 마스크입니다.
  • bV4CSType - 이미지의 색상 공간을 정의합니다.
  • bV4GammaRed - 빨간색 구성 요소의 톤 곡선입니다. bV4CSType에 LCS_CALIBRATED_RGB 값이 포함되어 있지 않으면 무시됩니다. 16×16 형식으로 표시됩니다.
  • bV4GammaGreen - 녹색 구성요소의 톤 곡선입니다. bV4CSType에 LCS_CALIBRATED_RGB 값이 포함되어 있지 않으면 무시됩니다.
  • bV4GammaBlue - 파란색 구성 요소 톤 곡선입니다. bV4CSType에 LCS_CALIBRATED_RGB 값이 포함되어 있지 않으면 무시됩니다.

비트맵V5헤더

Win95/NT 4.0: 응용 프로그램은 BITMAPV4HEADER를 사용할 수 있습니다. Win NT 3.51 및 이전 버전에서는 BITMAPINFOHEADER 구조를 사용해야 합니다.

Typedef 구조체( DWORD bV5Size; LONG bV5Width; LONG bV5Height; WORD bV5Planes; WORD bV5BitCount; DWORD bV5Compression; DWORD bV5SizeImage; LONG bV5XPelsPerMeter; LONG bV5YPelsPerMeter; DWORD bV5ClrUsed; bV5ClrImportant; DWORD bV5GreenMask; DWORD bV5 AlphaMask ; DWORD bV5ProfileSize; ;5헤더;

구조 시작부터 bV5GammaBlue까지의 필드에 대해 이전 버전(BITMAPINFOHEADER 및 BITMAPV4HEADER)과의 차이점만 설명합니다.

  • bV5CSType - 이미지의 색상 공간을 정의하며 다음 값을 사용할 수 있습니다.
LCS_CALIBRATED_RGB LCS_sRGB LCS_WINDOWS_COLOR_SPACE 프로필_링크된 프로필_EMBEDDED
  • bV5Intent - 다음 값을 사용할 수 있습니다.
LCS_GM_ABS_COLORIMETRIC LCS_GM_BUSINESS LCS_GM_GRAPHICS LCS_GM_IMAGES
  • bV5ProfileData - 구조 시작 부분부터 프로필 데이터 시작 부분까지의 오프셋(바이트)(프로필 파일 이름, 코드 테이블 1252자로 독점적으로 구성되고 0바이트로 끝나는 문자열). bV5CSType에 PROFILE_LINKED 및 PROFILE_EMBEDDED 이외의 값이 포함되어 있으면 무시됩니다.
  • bV5ProfileSize - 프로필 데이터 크기(바이트)입니다.
  • bV5Reserved - 예약됨. 0을 포함합니다.

팔레트

팔레트에는 사용 가능한 색상 수(8비트 이미지의 경우 256개)에 따라 일련의 4바이트 필드가 포함될 수 있습니다. 각 필드의 하위 3바이트는 색상의 빨간색, 녹색 및 파란색 구성 요소의 강도를 결정합니다. 상위 바이트는 사용되지 않습니다. 이 경우 이미지의 각 픽셀은 이 픽셀의 색상이 저장되는 팔레트 필드의 번호를 포함하는 1바이트로 설명됩니다.

이미지 픽셀이 16비트 숫자로 설명되는 경우 팔레트는 세 개의 2바이트 값을 저장할 수 있으며, 각 값은 16비트 픽셀에서 빨간색, 녹색 및 파란색 색상 구성 요소를 추출하기 위한 마스크를 정의합니다.

BMP 파일에 압축되지 않은 풀 컬러 이미지가 저장된 경우 팔레트가 포함되지 않을 수 있습니다.

이미지 데이터

어떤 형태로든 기록된 일련의 픽셀입니다. 픽셀은 아래에서 위로 행 단위로 저장됩니다. 각 이미지 라인은 4바이트의 배수 길이까지 0으로 채워집니다.

색 심도가 24비트인 bmp 파일에서는 각 픽셀의 색상 바이트가 BGR(Blue, Green, Red) 순서로 저장됩니다.

색 심도가 32비트인 bmp 파일에서는 각 픽셀의 색상 바이트가 BGRA 순서(파란색, 녹색, 빨간색, 알파)로 저장됩니다.

이미지 비트 심도

표현되는 색상의 수에 따라 각 포인트는 1에서 48비트까지 할당됩니다.

  • 1비트 - 흑백 이미지(2가지 색상).
  • 2비트 - 4가지 색상 가능(CGA 작동 모드)(2비트 모드는 공식적으로 표준화되지 않았지만 사용됩니다).
  • 4비트 - 16색 이미지(EGA 작동 모드).
  • 8비트(1바이트) - 256색, 인덱스 색상을 지원하는 마지막 모드입니다(아래 참조).
  • 16비트(2바이트) - HiColor 모드, 5-6-5 = 65536개의 가능한 음영, 5-5-5 = 32768개의 가능한 음영.
  • 24비트(3바이트) - TrueColor. 3바이트는 2의 거듭제곱으로 잘 매핑되지 않기 때문에(특히 단어 경계의 데이터 정렬이 중요한 메모리에 데이터를 저장할 때) 32비트 이미지가 대신 사용되는 경우가 많습니다. TrueColor 모드에서는 3개 채널(RGB 모드) 각각에 1바이트(256개 값 가능)가 할당되며 총 색상 수는 입니다.
  • 32비트(4바이트) - 이 모드는 TrueColor와 거의 유사하며, 네 번째 바이트는 일반적으로 사용되지 않거나 알파 채널(투명도)이 포함됩니다.
  • 48비트(6바이트) - 상대적으로 적은 수의 프로그램과 장비에서 지원되는 향상된 색상 정확도(채널당 16비트)로 거의 사용되지 않는 형식입니다.

인덱스 색상

비트 수가 픽셀당 1(2색), 2(4색), 4(16색) 또는 8(256색)인 경우 특수 인덱스 색상 모드를 사용할 수 있습니다. 이 경우, 각 픽셀에 해당하는 숫자는 색상을 의미하는 것이 아니라 팔레트에 있는 색상의 숫자를 의미합니다. 팔레트를 사용하면 이미지에 존재하는 색상에 맞게 이미지를 조정할 수 있습니다. 이 경우 이미지는 지정된 색상이 아니라 동시에 사용되는 최대 색상 수에 따라 제한됩니다.

예제 프로그램

다음 프로그램은 XWindow에서 24비트 BMP 파일을 엽니다. 색상 심도는 32비트여야 하며, 예제가 복잡해지기 때문에 낮은 색상 렌더링에서는 작동하지 않습니다.

/* 다음 줄로 컴파일됩니다: cc -o xtest xtest.c -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 -lm */#포함하다 #포함하다 #포함하다 #포함하다 #포함하다 #포함하다 #포함하다 #포함하다 #포함하다 #포함하다 #포함하다 #include "bitmap.h" /* 이 문서의 앞부분에서 설명한 BMP 헤더 정의는 다음과 같습니다. */ static XImage * CreateImageFromBuffer(Display*, unsigned char *, int, int) ; main(int argc, char * argv ) ( Display * dis; Window win; /* 우리의 창 */ XEvent event; /* 이벤트 */ GC gc;/* 그래픽 컨텍스트 */< 2 ) { perror ("use: xtest file.bmpXImage * 이미지; int n, 너비, 높이, fd, 크기; XImage * 이미지;부호 없는 char * 데이터; BITMAPFILEHEADER bmp; BITMAPINFOHEADER inf; char * buf; if (argc \N") ; 출구(1);) if ((fd = open(argv[ 1 ] , O_RDONLY) ) == - 1 ) ( printf ("비트맵 열기 오류 ) ;출구(1); /* 버퍼에 읽기 */ n = 읽기(fd, buf, 크기) ; 인쇄("크기 = %d바이트 읽음\n" , N) ; image = CreateImageFromBuffer(dis, buf, 너비, 높이) ;/* 버퍼 삭제 - 더 이상 필요하지 않음 */ 무료(버프); XMapWindow(dis, win) ; XSelectInput(dis, win, ExposureMask | KeyPressMask) ; while (1 ) ( XNextEvent(dis, & event) ; if (event.xany .window == win) ( 스위치 (event.type ) ( 케이스 노출: XPutImage(dis, win, gc, image, 0 , 0 , 0 , 0 , 이미지-> 너비, 이미지-> 높이) ; break ; case KeyPress: if (XLookupKeysym(& event.xkey , 0 ) == XK_q) ( XDestroyImage(image) ; XCloseDisplay(dis) ; close(fd) ; 종료(EXIT_SUCCESS) ; 중단 ; 기본값: 중단 ; /* BMP 이미지가 거꾸로 저장되고 * 미러링되므로 BMP 파일에서 Ximage를 생성합니다. 이는 루프에서 수정됩니다 */ XImage * CreateImageFromBuffer(Display * dis, unsigned char * buf, int width, int height) ( int 깊이, 화면; XImage * img = NULL; int i, j; int numBmpBytes; size_t numImgBytes; int32_t * imgBuf; int ind = 0 ; int 라인; /* 반영할 행과 열 번호 */ int new_ind;< numBmpBytes; i++ ) { unsigned int r, g, b; /* 새 인덱스 */ screen = DefaultScreen(dis) ;깊이 = DefaultDepth(dis, screen) ; 온도 = 너비 * 3 ;선 = 온도 + 너비 % 4 ;<< 8 | b << 16 ) << 8 ; ind++; } img = XCreateImage(dis, CopyFromParent, depth, ZPixmap, 0 , (char * ) imgBuf, width, height, 32 , 0 ) ; XInitImage(img) ; /* 정렬을 고려한 문자열 길이 */ numImgBytes = (4 * (너비 * 높이) ) ;

BMP 파일 형식(BitMaP의 약자)은 해당 시스템이 래스터 배열을 저장하는 기본 Windows 형식과 가장 밀접하게 일치하기 때문에 Windows용 기본 래스터 그래픽 형식입니다. BMP 형식에서 가장 자주 사용되는 파일 이름 확장자는 BMP이지만 일부 파일에는 Run Length Encoding을 의미하는 RLE 확장자가 있습니다. 파일 이름의 RLE 확장자는 일반적으로 파일의 래스터 정보가 BMP 형식 파일에 유효한 두 가지 RLE 압축 방법 중 하나를 사용하여 압축되었음을 나타냅니다.

BMP 파일에서 각 픽셀의 색상 정보는 1, 4, 8, 16 또는 24비트(비트/픽셀)로 인코딩됩니다. 색상 깊이라고도 하는 픽셀당 비트 수는 이미지의 최대 색상 수를 결정합니다. 1비트/픽셀의 깊이를 가진 이미지는 두 가지 색상만 가질 수 있으며, 24비트/픽셀의 깊이를 가진 이미지는 1,600만 개 이상의 다양한 색상을 가질 수 있습니다.

아래 다이어그램은 256색 이미지(8비트/픽셀 심도)를 포함하는 일반적인 BMP 파일의 구조를 보여줍니다. 파일은 래스터 그래픽 파일 헤더, 래스터 배열 정보 헤더, 색상표 및 래스터 배열 데이터 자체의 네 가지 주요 섹션으로 나뉩니다. 래스터 그래픽 파일의 헤더에는 래스터 배열 데이터 영역이 시작되는 주소를 포함하여 파일에 대한 정보가 포함되어 있습니다. 래스터 배열 정보 헤더에는 높이 및 너비(픽셀 단위)와 같이 파일에 저장된 이미지에 대한 정보가 포함되어 있습니다. 색상표는 이미지에 사용된 색상에 대한 RGB(빨간색, 녹색, 파란색) 기본 색상 값을 제공합니다. 256개 이상의 색상 표시를 허용하지 않는 비디오 어댑터를 사용할 때 BMP 파일을 읽고 표시하는 프로그램은 정확한 색상 재현을 위해 어댑터의 색상 팔레트에서 이러한 RGB 값을 프로그래밍 방식으로 설정할 수 있습니다.

BMP 파일의 실제 래스터 배열 데이터 형식은 각 픽셀의 색상 데이터를 인코딩하는 데 사용되는 비트 수에 따라 다릅니다. 256색 이미지의 경우 실제 래스터 배열 데이터가 포함된 파일 부분의 각 픽셀은 1바이트(8비트)로 설명됩니다. 이 픽셀 설명은 RGB 색상 값을 나타내지는 않지만 파일의 색상표를 입력하기 위한 포인터 역할을 합니다. 따라서 R/G/B=255/0/0이 BMP 파일의 색상표에 첫 번째 RGB 색상 값으로 저장되면 래스터 배열의 픽셀 0 값에 밝은 빨간색이 할당됩니다. 픽셀 값은 (보통) 이미지의 맨 아래 행부터 시작하여 왼쪽에서 오른쪽 순서로 저장됩니다. 따라서 256색 BMP 파일에서 래스터 배열 데이터의 첫 번째 바이트는 이미지의 왼쪽 하단에 있는 픽셀 색상의 인덱스입니다. 두 번째 바이트는 오른쪽에 인접한 픽셀의 색상에 대한 인덱스를 나타냅니다. 각 행의 바이트 수가 홀수이면 추가 바이트가 각 행에 추가되어 래스터 배열 데이터를 16비트 경계에 정렬합니다. .


모든 BMP 파일이 다이어그램에 표시된 것과 같은 구조를 갖는 것은 아닙니다. 예를 들어, 16비트 및 24비트/픽셀 BMP 파일에는 색상표가 없습니다. 이 파일에서 래스터 배열의 픽셀 값은 RGB 색상 값을 직접적으로 나타냅니다. 파일의 개별 섹션의 내부 저장 형식도 다를 수 있습니다. 예를 들어, 일부 16색 및 256색 BMP 파일의 래스터 배열 정보는 동일한 이미지 픽셀의 시퀀스를 시퀀스의 픽셀 수와 해당 색상을 지정하는 토큰으로 바꾸는 RLE 알고리즘을 사용하여 압축할 수 있습니다. Windows에서는 다양한 래스터 배열 헤더와 색상표 형식을 사용하는 OS/2 스타일 BMP 파일로 작업할 수 있습니다.

이 기사는 bmp 그래픽 형식이 어떻게 보이는지에 관한 것입니다. 이는 가장 간단한 형식 중 하나이지만 이 형식에는 다양한 변형이 있기 때문에 모든 사항이 명확하지는 않습니다. 그러니 물 붓는 것을 멈추고 시작합시다.

형식 구조

bmp 형식(BitMaP - 비트맵 또는 러시아어로 비트 배열이라는 단어에서 유래)은 Windows OS에서 읽고 표시하기 매우 쉬운 압축되지 않은(주로) 이미지로, 도움이 되는 특수 API 기능이 있습니다.

먼저 데이터를 bmp 형식으로 그래픽으로 표현해 보겠습니다(MSDN에서 가져온 사진).

처음에는 파일 헤더(BITMAPFILEHEADER)가 있습니다. 다음과 같이 설명됩니다.

bf유형파일 형식을 결정합니다. 여기서 그는 BM이어야 합니다. BMP 파일을 텍스트 편집기(또는 16진수 편집기)에서 열면 처음 두 문자가 BM(아마도 짐작하셨겠지만 BitMap이라는 단어에서 유래)임을 알 수 있습니다.
bf크기파일 자체의 크기(바이트)입니다. 엄밀히 말하면 계산해야 하는데(권장) 파일 크기를 잘못 설정했는데(고의는 아니었지만 :)) 문제도 없었고(ACDSee는 문제 없이 읽었고, 내 프로그램은 작동했습니다), 추천하지 않습니다. 의도적으로 잘못 작성하면 갑자기 이 크기를 실제 크기와 비교하여 bmp가 아닌 다른 크기로 결정하는 성실한 프로그램이 나타납니다. 이상적으로 모든 프로그램은 가짜가 아닌 실제 bmp인지 확인하기 위해 먼저 bfType에 "BM"(따옴표 제외)이 포함되어 있는지 확인하고 두 번째로 bfSize가 파일 크기와 같은지 확인해야 합니다.
bfReserved1 및 bfReserved2예약되어 있으며 0이어야 합니다.
bfOffBits. 이는 이 구조에서 가장 중요한 필드 중 하나입니다. 그림을 설명하는 파일의 시작 부분(또는 MSDN에서 말하는 "BITMAPFILEHEADER 구조의 시작 부분")을 기준으로 비트맵 자체가 시작되는 위치를 보여줍니다. 즉, 배열의 시작 부분에 도달하려면 다음을 작성해야 합니다.

typedef 구조체 태그BITMAPINFOHEADER
{
DWORD biSize;
LONG 이중 너비;
LONG 이중 높이;
WORD 복엽면;
WORD biBitCount;
DWORD 이중압축;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClr사용됨;
DWORD biClr중요;
) BITMAPINFOHEADER, * PBITMAPINFOHEADER;

바이사이즈구조 자체의 크기입니다. 다음과 같이 초기화해야 합니다. bih.biSize = sizeof(BITMAPINFOHEADER);
여기서 다시 bih가 다음과 같이 선언되었다고 가정합니다. BITMAPINFOHEADER bih;
이중 너비 및 이중 높이이미지의 너비와 높이를 각각 픽셀 단위로 설정합니다.
복엽 비행기평면 수를 지정합니다. 지금은 항상 1로 설정되어 있습니다.
비트카운트- 픽셀당 비트 수입니다. 이에 대해서는 아래에서 더 자세히 이야기하겠습니다.
이중압축압축 유형을 나타냅니다. bmp가 갑자기 압축된다는 사실에 놀라거나 두려워하지 마세요. 나는 개인적으로 하나 이상의 압축된 bmp를 본 적이 없습니다(하지만 그것이 존재하지 않는다고 말하는 것은 아닙니다). 압축이 없으면 이 플래그를 BI_RGB로 설정해야 합니다. 이 기사에서는 압축되지 않은 형식에 대해 이야기하므로 다른 플래그는 나열하지 않겠습니다. Windows 98부터 BI_JPEG 옵션이 나타났기 때문에 JPEG와 PNG 파일에도 동일한 구조가 사용되는 것 같습니다. 이 사진은 JPEG와 BI_PNG, PNG라는 것을 보여줍니다(Jpeg 형식에 대해서는 전혀 모릅니다. 저는 MSDN에 작성된 내용을 토대로 이러한 결론을 내렸습니다.
바이사이즈이미지이미지의 크기를 바이트 단위로 나타냅니다. 이미지가 압축되지 않은 경우(즉, 이전 필드가 BI_RGB로 설정됨) 여기에 0을 써야 합니다. biXPelsPerMeter그리고 biYPelsPerMeter비트맵(래스터)이 출력될 최종 장치의 수평 및 수직 해상도(미터당 픽셀 수)를 각각 나타냅니다. 애플리케이션은 이 값을 사용하여 리소스 그룹에서 원하는 장치에 가장 적합한 비트맵을 선택할 수 있습니다. 사실 bmp 형식은 본질적으로 하드웨어 독립적인 래스터입니다. 즉, 얻은 것의 모양이 이 래스터가 투영되는 대상에 의존하지 않는 경우입니다. 예를 들어, 그림은 모니터 화면에 그려지든 프린터로 인쇄하든 상관없이 동일하게 보입니다. 그러나 장치의 해상도는 다르며 이러한 매개 변수가 사용되는 것은 사용 가능한 사진 중에서 가장 적합한 사진을 선택하는 것입니다.
biClr사용됨테이블에서 사용되는 색상 수를 결정합니다. 이 값이 0이면 래스터는 biBitCount 값에서 허용하는 최대 색상 수를 사용합니다. 이는 압축된 이미지에만 해당됩니다. biClrUsed가 0이 아니고 biBitCount가 16보다 작은 경우 biClrUsed는 사용 가능한 그래픽 엔진 또는 장치 드라이버 색상의 현재 수를 결정합니다. biBitCount가 16보다 크거나 같으면 biClrUsed는 현재 시스템 팔레트를 최적화하는 데 사용되는 색상표의 크기를 결정합니다.
biClr중요- 중요한 색상의 개수입니다. 그림을 묘사하는 데 필요한 색상 수를 결정합니다. 이 값이 0(보통 그렇듯이)이면 모든 색상이 중요한 것으로 간주됩니다.

BMP 형식의 유형

모든 유형의 bmp 형식 조건부로팔레트와 비팔레트의 두 가지 유형으로 나눌 수 있습니다. 즉, 팔레트가 특정 형식으로 사용되는지 여부입니다. 팔레트는 팔레트 프리 형식일 수도 있지만 여기서는 사용되지 않습니다. 팔레트 프리 bmps에서는 특정 위치부터 시작하여 파일에 포함된 비트에서 색상이 직접 계산됩니다. 그리고 팔레트에서 각 바이트는 하나 이상의 픽셀을 나타내며 바이트(또는 비트) 값은 팔레트의 색상 인덱스입니다. 우선 가능한 옵션을 비교하는 표를 제공하겠습니다. 그림 유형(팔레트 또는 팔레트 프리)은 픽셀당 제공되는 비트 수, 즉 BITMAPINFOHEADER 구조의 biBitCount 값에 따라 달라집니다.

비트카운트팔레트 또는 비팔레트 형식가능한 최대 색상 수메모 1 팔레트2 반드시 흑백일 필요는 없지만 두 가지 색상의 팔레트 사진입니다. 래스터 비트(바로 아래)가 재설정되면(0과 동일) 이는 팔레트의 첫 번째 색상이 이 위치에 있어야 하고, 설정된 경우(1과 동일) 두 번째 색상이 이 위치에 있어야 함을 의미합니다. 4 팔레트16 각 바이트는 2픽셀을 나타냅니다. 다음은 MSDN의 예입니다. 이미지의 첫 번째 바이트가 0x1F이면 이는 두 개의 픽셀에 해당하고 첫 번째 색상은 팔레트의 두 번째 색상(카운트다운이 0부터 시작하기 때문입니다)이고 두 번째 픽셀은 다음과 같습니다. 팔레트의 16번째 컬러. 8 팔레트256 가장 일반적인 옵션 중 하나입니다. 그러나 동시에 가장 간단한 것입니다. 팔레트는 1KB를 차지합니다(하지만 계산하지 않는 것이 좋습니다). 1바이트는 하나의 색상입니다. 또한 그 값은 팔레트의 색상 번호입니다. 16 팔레트 없음2^16 또는 2^15이것은 가장 혼란스러운 옵션입니다. 팔레트가 없다는 사실부터 시작하겠습니다. 즉, 래스터의 모든 2바이트(1개의 WORD 단어)가 하나의 픽셀을 고유하게 정의합니다. 하지만 무슨 일이 일어나는지는 이렇습니다. 16비트가 있고 3가지 색상 구성 요소(빨간색, 녹색, 파란색)가 있습니다. 하지만 16은 3으로 나누어지기를 원하지 않습니다. 따라서 여기에는 두 가지 옵션이 있습니다. 첫 번째는 16비트가 아닌 15비트를 사용하는 것입니다. 그런 다음 각 색상 구성 요소에 대해 5비트가 있습니다. 이 방법으로 우리는 최대 2^15 = 32768 색상을 사용할 수 있고 삼중 R-G-B = 5-5-5를 얻을 수 있습니다. 그러나 16개 중 전체 비트가 헛되이 손실됩니다. 그러나 우리의 눈은 모든 색상 중에서 녹색을 더 잘 인식하므로 이 비트를 녹색 구성 요소에 주기로 결정했습니다. 삼중 R-G-B = 5-6-5이므로 이제 2^16 = 65536 색상을 사용할 수 있습니다. 하지만 가장 불쾌한 점은 두 옵션을 모두 사용한다는 것입니다. MSDN에서는 사용되는 색상 수를 구별하기 위해 BITMAPINFOHEADER 구조의 biClrUsed 필드를 이 값으로 채울 것을 제안합니다. 각 구성 요소를 선택하려면 다음 마스크를 사용해야 합니다. 5-5-5 형식의 경우: 파란색 구성요소의 경우 0x001F, 녹색 구성요소의 경우 0x03E0, 빨간색의 경우 0x7C00입니다. 5-6-5 형식의 경우: 각각 0x001F - 파란색, 0x07E0 - 녹색 및 0xF800 빨간색 구성 요소입니다. 24 팔레트 없음2^24 그리고 이것은 가장 간단한 형식입니다. 여기서 3바이트는 3가지 색상 구성요소를 정의합니다. 즉, 바이트당 하나의 구성 요소입니다. 간단히 RGBTRIPLE 구조를 읽고 rgbtBlue, rgbtGreen, rgbtRed 필드를 사용합니다. 그 순서대로 갑니다. 32 팔레트 없음2^32 여기서 4바이트는 3개의 구성요소를 정의합니다. 단, 1바이트는 사용되지 않습니다. 예를 들어 알파 채널(투명도)에 사용할 수 있습니다. 이 경우 다음과 같이 설명되는 RGBQUAD 구조를 사용하여 래스터를 읽는 것이 편리합니다.

BMP 형식의 데이터 저장

자, 이제 가장 흥미로운 부분에 이르렀습니다. BITMAPFILEHEADER 및 BITMAPINFOHEADER 구조 다음에는 팔레트가 옵니다. 또한 형식에 팔레트가 없으면 존재하지 않을 수도 있지만 이에 의존해서는 안됩니다. 사실 제가 bmp 형식을 막 이해하기 시작했을 때 한 책에서 해당 형식에 팔레트가 없으면 팔레트가 전혀 없다는 내용을 읽었습니다. 심지어 두 장의 그림도 있었습니다 - 형식 다이어그램: 하나는 팔레트가 있고 다른 하나는 팔레트가 없습니다. 그리고 그 당시 나는 bmp 파일을 가지고 부지런히 동작하는 프로그램을 작성하고 있었습니다. 그리고 들어오는 이미지를 256색에서 24비트(있는 경우)로 임시 파일로 변환해야 했습니다. 그리고 저는 24비트 팔레트를 만들지 않았습니다(BITMAPFILEHEADER 구조의 bfOffBits는 sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)의 합과 같았고 들어오는 24비트 팔레트는 변경되지 않은 채로 두었습니다. 256색 래스터를 사용하면 모든 것이 가능합니다. 필요한 부분 대신 아래쪽에 쓰레기가 표시되는 24비트 이미지를 발견하기 전까지는 원본 파일의 크기를 비교할 때까지 무엇이 잘못되었는지 즉시 이해하지 못했습니다. 팔레트가 없었다면 거기에 있었어야 할 이론적 차이는 정확히 1KB(정확히 1024바이트)였습니다. 따라서 팔레트가 있는지 여부에 의존하지 마십시오. 크기에 따라(내가 본 모든 사진의 팔레트 크기는 256색 또는 1Kb였지만) 항상 bfOffBits를 사용하여 파일을 통해 래스터의 시작 부분으로 이동합니다. 팔레트는 RGBQUAD 구조의 배열입니다. 팔레트에 모든 색상이 사용되지 않더라도(예: 16개만) 팔레트 A 256 * 4 = 1024에 256개의 필드가 할당되는 경우가 많습니다. 여기서 4는 RGBQUAD 구조의 크기입니다. , 동일한 1킬로바이트를 얻습니다.

팔레트 바로 뒤에는 래스터 자체가 옵니다. 여기서 상황이 더욱 혼란스러워집니다. 먼저, 여기서는 형식에 따라 위의 표에 표시된 대로 픽셀을 설명합니다. 또한 색상 구성 요소의 값(팔레트가 없는 경우)을 포함하거나 팔레트 배열의 인덱스가 될 수도 있습니다. 그림 자체는 한 줄씩 기록됩니다. 둘째, 그림이 거꾸로 보입니다. 즉, 맨 아래 줄이 먼저 기록되고 그 다음 두 번째 줄이 맨 위까지 기록됩니다. 그리고 세 번째로, 위에 적힌 대로 래스터 선의 크기가 4의 배수가 아닌 경우에는 선의 길이가 문단의 배수가 되도록 1~3개의 빈(0) 바이트로 채워집니다. 이것이 가장 불쾌한 일입니다. 사실은 각 형식에 대해 이 빈 바이트 수를 조정해야 한다는 것입니다. (비록 팔레트의 일부를 거기에 쓰고 싶지만 어쨌든 이 바이트를 건너뛰고 아무도 없는 경우 추가 "0" 변수를 만들고 싶지 않습니다. 필요합니다). 어떤 형식에 대해 줄 끝에 몇 바이트를 추가해야 하는지 보여주는 공식이 포함된 표를 제공합니다. 여기서 Width 변수는 짐작할 수 있듯이 이미지의 너비를 의미합니다. 이 모든 공식은 실험적으로 확립되었습니다. 가장 많이 사용되는 형식에 대해서만 예를 들어 보겠습니다. 나머지는 직접 작성하셔도 됩니다.

예제 프로그램

모든 소스를 다운로드할 수 있습니다. 여기서는 많이 쓰지 않겠습니다. 그냥 주석으로 기능을 설명하겠습니다.

안녕하세요 1. bmp 형식의 사진을 생성합니다.
여기서 단색 그림이 생성됩니다. 이러한 기능에는 bmp 8, 16 및 24비트 생성이라는 세 가지 예가 있습니다. 16비트용으로만 드리겠습니다.

// 5-5-5와 같은 bmp 형식 16비트의 그림을 만들어 보겠습니다. 이는 단순히 단색입니다.
void CreateBmp555(char * fname, WORD 색상)
{
h파일을 처리합니다.
DWORD RW;
int i, j;

// 필요한 구조를 선언합니다.
비트맵 파일 헤더 bfh;
BITMAPINFOHEADER bih;
바이트 팔레트[1024];

// 팔레트
// 35 x 50 픽셀의 이미지를 만들어 보겠습니다.
정수 너비 = 35 ;

int 높이 = 50 ; memset(팔레트, 0, 1024);
// 팔레트에는 0이 있습니다. 채우세요.

memset (&bfh, 0 , sizeof (bfh) ) ; Bfh.bfType = 0x4D42 ;
// 이것이 bmp "BM"임을 나타내자 bfh.bfOffBits = sizeof(bfh) + sizeof(bih) + 1024;
// 팔레트는 1Kb를 차지하지만 사용하지 않을 것입니다.
bfh.bfSize = bfh.bfOffBits +
sizeof(색상) * 너비 * 높이 + 높이 * ((sizeof (색상) * 너비) % 4 ) ;
// 최종 파일의 크기를 계산합니다.
memset (&bih, 0 , sizeof (bih) ) ;
bih.biSize = sizeof(bih); //그렇게 되겠죠
bih.biBitCount = 16 ; // 우리는 5-5-5를 사용합니다
bih.biCompression = BI_RGB;
// 압축 없음
bih.biHeight = 높이;
bih.biWidth = 너비;
bih.biPlanes = 1 ;

// 1이어야 함
// 나머지 필드는 0으로 유지됩니다.
HFile = CreateFile(fname, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);

if (hFile == INVALID_HANDLE_VALUE)
반품 ;
// 헤더 쓰기

WriteFile(hFile, & bfh, sizeof (bfh) , & RW, NULL ) ;
WriteFile(hFile, & bih, sizeof (bih) , & RW, NULL ) ;
// 팔레트 작성< Height; i++ )
{
WriteFile(hFile, 팔레트, 1024, &RW, NULL);< Width; j++ )
{
(i = 0; 나는
}

(j = 0 ; j
WriteFile (hFile, & color, sizeof (color) , & RW, NULL ) ;
}
// 테두리에 맞춰 정렬
}

WriteFile(hFile, Palette, (sizeof (color) * Width) % 4 , & RW, NULL ) ;

닫기핸들(hFile) ;

색상 - 그림 색상. 이 변수의 값은 첫 번째 표에 따라 채워져야 합니다. 예를 들어 ACDSee에서 결과 그림을 볼 수 있습니다. 방금 Photoshop에서 열려고 했는데 이 형식에서는 읽을 수 없는 것으로 나타났습니다. :).
{
비트맵 파일 헤더 bfh;
BITMAPINFOHEADER bih;
예 2. 그림을 8비트(256색)에서 24비트로 변환합니다.
BOOL Convert256To24(char * fin, char * fout)
int 너비, 높이;
RGBQUAD 팔레트[ 256 ] ;
바이트 * inBuf;
DWORD RW;
RGBTRIPLE * outBuf;
int i, j;

hIn, hOut을 처리합니다.
DWORD OffBits;
HIn = CreateFile(fin, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

if (hIn == INVALID_HANDLE_VALUE)
거짓을 반환합니다;
{
HOut = CreateFile(fout, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
HIn = CreateFile(fin, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
}

if (hOut == INVALID_HANDLE_VALUE)
닫기핸들(hIn);
// 데이터 읽기
파일 읽기(hIn, & bfh, sizeof (bfh) , & RW, NULL ) ;

파일 읽기(hIn, & bih, sizeof (bih) , & RW, NULL ) ;
ReadFile(hIn, Palette, 256 * sizeof (RGBQUAD) , & RW, NULL ) ;
// 포인터를 래스터의 시작 부분으로 설정합니다.
SetFilePointer(hIn, bfh.bfOffBits, NULL, FILE_BEGIN) ;
너비 = bih.biWidth ;

높이 = bih.biHeight ;
OffBits = bfh.bfOffBits ;
// 메모리 할당

inBuf = 새로운 BYTE [너비];
outBuf = 새로운 RGBTRIPLE [너비]; // 헤더 채우기
bfh.bfOffBits = sizeof(bfh) + sizeof(bih);
// 팔레트를 쓰지 말자

bih.biBitCount = 24 ;
if (hFile == INVALID_HANDLE_VALUE)
bfh.bfSize = bfh.bfOffBits + 4 * 너비 * 높이 + 높이 * (너비 % 4 ) ;
// 파일 크기

// 나머지는 변경되지 않습니다.
// 팔레트 작성< Height; i++ )
{
WriteFile (hOut, & bfh, sizeof (bfh) , & RW, NULL ) ;
WriteFile(hFile, 팔레트, 1024, &RW, NULL);< Width; j++ )
{
WriteFile (hOut, & bih, sizeof (bih) , & RW, NULL ) ;
outBuf[ j].rgbtGreen = 팔레트[ inBuf[ j] ] .rgbGreen ;
outBuf[ j].rgbtBlue = 팔레트[ inBuf[ j] ] .rgbBlue ;
}
WriteFile (hOut, outBuf, sizeof (RGBTRIPLE) * 너비, & RW, NULL ) ;

// 정렬을 위한 쓰레기 쓰기
WriteFile (hOut, 팔레트, 너비 % 4 , & RW, NULL ) ;
SetFilePointer(hIn, (3 * 너비) % 4, NULL, FILE_CURRENT) ;
}

inBuf 삭제;
outBuf 삭제;
HOut = CreateFile(fout, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
CloseHandle(hOut);
TRUE를 반환합니다.
}

소스 파일과 대상 파일의 이름이 각각 함수에 전달되어야 합니다.

컴퓨터에 설치한 경우 바이러스 백신 프로그램할 수 있다 컴퓨터의 모든 파일은 물론 각 파일을 개별적으로 검사합니다.. 파일을 마우스 오른쪽 버튼으로 클릭하고 파일에 바이러스가 있는지 검사하는 적절한 옵션을 선택하여 모든 파일을 검사할 수 있습니다.

예를 들어, 이 그림에서는 강조 표시되어 있습니다. 내 파일.bmp 파일, 그런 다음 이 파일을 마우스 오른쪽 버튼으로 클릭하고 파일 메뉴에서 옵션을 선택해야 합니다. "AVG로 스캔". 이 옵션을 선택하면 AVG Antivirus가 파일을 열고 바이러스를 검사합니다.


결과적으로 오류가 발생하는 경우도 있습니다. 잘못된 소프트웨어 설치, 이는 설치 프로세스 중에 발생한 문제로 인해 발생할 수 있습니다. 이는 운영 체제를 방해할 수 있습니다. BMP 파일을 올바른 응용 프로그램 도구에 연결, 소위 영향을 미치는 "파일 확장자 연결".

때로는 단순하다 Adobe Illustrator CC 재설치 BMP를 Adobe Illustrator CC와 올바르게 연결하면 문제를 해결할 수 있습니다. 다른 경우에는 파일 연결 문제로 인해 발생할 수 있습니다. 나쁜 소프트웨어 프로그래밍개발자이며 추가 지원을 받으려면 개발자에게 문의해야 할 수도 있습니다.


조언:최신 수정 사항과 업데이트를 받으려면 Adobe Illustrator CC를 최신 버전으로 업데이트해 보세요.


이는 너무 뻔해 보일 수도 있지만, 종종 BMP 파일 자체가 문제의 원인일 수 있습니다.. 이메일 첨부파일을 통해 파일을 받거나 웹사이트에서 다운로드한 후 다운로드 프로세스가 중단된 경우(예: 정전 또는 기타 사유) 파일이 손상될 수 있습니다. 가능하다면 BMP 파일의 새 복사본을 구해 다시 열어보세요.


주의하여:손상된 파일은 PC에 있는 이전 또는 기존 맬웨어에 부수적인 손상을 일으킬 수 있으므로 컴퓨터에서 항상 업데이트된 바이러스 백신을 실행하는 것이 중요합니다.


파일이 BMP인 경우 컴퓨터의 하드웨어와 관련된필요한 파일을 열려면 장치 드라이버 업데이트이 장비와 관련이 있습니다.

이 문제 일반적으로 미디어 파일 형식과 관련됨, 이는 컴퓨터 내부의 하드웨어를 성공적으로 여는 데 달려 있습니다. 사운드 카드 또는 비디오 카드. 예를 들어, 오디오 파일을 열려고 하는데 열 수 없는 경우 다음을 수행해야 할 수 있습니다. 사운드 카드 드라이버 업데이트.


조언: BMP 파일을 열려고 하면 다음과 같은 메시지가 나타납니다. .SYS 파일 오류 메시지, 문제는 아마도 손상되거나 오래된 장치 드라이버와 관련됨업데이트해야 합니다. DriverDoc과 같은 드라이버 업데이트 소프트웨어를 사용하면 이 프로세스를 더 쉽게 만들 수 있습니다.


단계를 수행해도 문제가 해결되지 않는 경우 BMP 파일을 여는 데 여전히 문제가 있습니다. 그 이유는 다음과 같습니다. 사용 가능한 시스템 리소스 부족. BMP 파일의 일부 버전을 컴퓨터에서 제대로 열려면 상당한 양의 리소스(예: 메모리/RAM, 처리 능력)가 필요할 수 있습니다. 이 문제는 상당히 오래된 컴퓨터 하드웨어와 동시에 훨씬 새로운 운영 체제를 사용하는 경우 매우 일반적입니다.

이 문제는 운영 체제(및 백그라운드에서 실행 중인 기타 서비스)가 작동하지 않아 컴퓨터가 작업을 따라잡는 데 어려움을 겪을 때 발생할 수 있습니다. BMP 파일을 열려면 너무 많은 리소스를 소비합니다.. 비트맵 이미지 파일을 열기 전에 PC의 모든 응용 프로그램을 닫아보세요. 컴퓨터에서 사용 가능한 모든 리소스를 확보하면 BMP 파일을 열기 위한 최상의 조건이 제공됩니다.


당신이 위에 설명된 모든 단계를 완료했습니다. BMP 파일이 여전히 열리지 않으면 다음을 실행해야 할 수도 있습니다. 장비 업데이트. 대부분의 경우 이전 버전의 하드웨어를 사용하더라도 처리 능력은 대부분의 사용자 응용 프로그램에 충분할 수 있습니다(3D 렌더링, 금융/과학 모델링 또는 CPU 집약적인 작업을 많이 수행하지 않는 한). 집중 멀티미디어 작업) . 따라서, 컴퓨터에 메모리가 부족할 가능성이 높습니다.(일반적으로 "RAM" 또는 랜덤 액세스 메모리라고 함) 파일을 여는 작업을 수행합니다.




맨 위