BMP 이미지는 무엇으로 구성되어 있나요? 다른 사전에 "BMP"가 무엇인지 확인

BMP는 데이터 압축이 없는 널리 사용되는 이미지 형식입니다. 이 확장 프로그램으로 사진을 보는 데 사용할 수 있는 프로그램을 살펴보겠습니다.

아마도 많은 사람들은 이미 BMP 형식을 사용하여 사진을 표시하므로 이미지 뷰어와 그래픽 편집기를 사용하여 이러한 파일의 내용을 볼 수 있다고 추측했을 것입니다. 또한 브라우저 및 범용 뷰어와 같은 일부 다른 응용 프로그램도 이 작업을 처리할 수 있습니다. 다음으로 특정 소프트웨어를 사용하여 BMP 파일을 여는 알고리즘을 살펴보겠습니다.

방법 1: FastStone 이미지 뷰어

인기 있는 이미지 뷰어인 FastStone Viewer부터 시작해 보겠습니다.


방법 2: IrfanView

이제 또 다른 인기 이미지 뷰어 IrfanView에서 BMP를 여는 과정을 살펴보겠습니다.


방법 3: XnView

BMP 파일 열기를 살펴볼 다음 이미지 뷰어는 XnView입니다.


방법 4: 어도비 포토샵

이제 인기 있는 응용 프로그램인 Photoshop부터 시작하여 그래픽 편집기에서 설명된 문제를 해결하기 위한 작업 알고리즘을 설명하겠습니다.


이 방법의 가장 큰 단점은 Photoshop 응용 프로그램이 유료라는 것입니다.

방법 5: 김프

BMP를 표시할 수 있는 또 다른 그래픽 편집기는 Gimp입니다.


이전 방법과 비교할 때 이 방법은 Gimp 애플리케이션 사용에 대한 비용을 요구하지 않는다는 이점이 있습니다.

방법 6: 오픈오피스

무료 OpenOffice 패키지에 포함된 Draw 그래픽 편집기도 이 작업에 성공적으로 대처합니다.


방법 7: 구글 크롬

그래픽 편집기와 이미지 뷰어뿐만 아니라 Google Chrome과 같은 다양한 브라우저에서도 BMP를 열 수 있습니다.


방법 8: 유니버설 뷰어

BMP와 함께 작동할 수 있는 또 다른 프로그램 그룹은 Universal Viewer 응용 프로그램을 포함하는 Universal Viewer입니다.


방법 9: 페인트

타사 설치 프로그램을 사용하여 BMP를 여는 방법은 위에 나열되어 있지만 Windows에는 자체 그래픽 편집기인 그림판이 있습니다.


방법 10: Windows 사진 뷰어

Windows에는 BMP를 시작하는 데 사용할 수 있는 이미지 전용 뷰어도 내장되어 있습니다. Windows 7을 예로 들어 이 작업을 수행하는 방법을 살펴보겠습니다.


보시다시피 BMP 이미지를 열 수 있는 프로그램 목록이 상당히 많습니다. 그리고 이것이 전부는 아니지만 가장 인기있는 것입니다. 특정 애플리케이션의 선택은 사용자의 개인 선호도와 설정된 목표에 따라 달라집니다. 그림이나 사진만 보려면 사진 뷰어를 사용하고, 편집하려면 이미지 편집기를 사용하는 것이 좋습니다. 또한 보기 대신 브라우저를 사용할 수도 있습니다. 사용자가 BMP 작업을 위해 컴퓨터에 추가 소프트웨어를 설치하고 싶지 않은 경우 내장된 Windows 소프트웨어를 사용하여 이미지를 보고 편집할 수 있습니다.

이 기사는 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개만) 팔레트에 여전히 256개의 필드가 할당되는 경우가 많습니다. 그리고 256 * 4 = 1024, 여기서 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 ; // 픽셀당 16비트
bih.biClrUsed = 32768 ; // 우리는 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 ) ;

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

// 테두리에 맞춰 정렬
WriteFile(hFile, Palette, (sizeof (color) * Width) % 4 , & RW, NULL ) ;
}
닫기핸들(hFile) ;
}

색상 - 그림 색상. 이 변수의 값은 첫 번째 표에 따라 채워져야 합니다. 예를 들어 ACDSee에서 결과 그림을 볼 수 있습니다. 방금 포토샵에서 열어보려고 했는데 이 형식으로는 읽을 수 없는 것으로 나타났습니다. 하지만 읽을 수는 있습니다 :).

예 2. 그림을 8비트 형식(256색)에서 24비트로 변환합니다.

BOOL Convert256To24(char * fin, char * fout)
{
비트맵 파일 헤더 bfh;
BITMAPINFOHEADER bih;
int 너비, 높이;
RGBQUAD 팔레트[ 256 ] ;
바이트 * inBuf;
RGBTRIPLE * outBuf;
hIn, hOut을 처리합니다.
DWORD RW;
DWORD OffBits;
int i, j;

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);
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 ;
bfh.bfSize = bfh.bfOffBits + 4 * 너비 * 높이 + 높이 * (너비 % 4 ); // 파일 크기

// 나머지는 변경되지 않습니다.
// 헤더 쓰기
WriteFile (hOut, & bfh, sizeof (bfh) , & RW, NULL ) ;
WriteFile (hOut, & bih, sizeof (bih) , & RW, NULL ) ;

// 변환을 시작해보자
(i = 0; 나는< Height; i++ )
{
ReadFile(hIn, inBuf, 너비, & RW, NULL);
(j = 0 ; j< Width; j++ )
{
outBuf[ j].rgbtRed = 팔레트[ inBuf[ j] ] .rgbRed ;
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 삭제;
닫기핸들(hIn);
CloseHandle(hOut);
TRUE를 반환합니다.
}

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

귀하는 .bmp로 끝나는 파일 확장자를 가진 파일을 가지고 있기 때문에 여기에 있습니다. 파일 확장자가 .bmp인 파일은 특정 응용 프로그램에서만 시작할 수 있습니다. .bmp 파일은 문서나 미디어가 아닌 데이터 파일일 가능성이 있습니다. 즉, 전혀 볼 수 없다는 의미입니다.

 .bmp 파일이 무엇인가요?

BMP 파일 형식은 압축되지 않은 래스터 이미지 파일 생성을 위해 구현된 일련의 이미지 인코딩 사양으로 구성됩니다. 이러한 비트맵 이미지 파일에는 해당 BMP 파일의 이미지 콘텐츠와 관련된 기타 세부 정보 중에서 비트맵 식별자를 포함하는 파일 헤더가 첨부됩니다. BMP 파일에 저장된 디지털 이미지 콘텐츠는 직사각형 격자 내의 픽셀로 구성됩니다. 이러한 BMP 파일에 포함된 픽셀은 BMP 파일의 파일 헤더에 따라 다양한 색상 심도로 통합될 수 있습니다. 그레이스케일 그라데이션은 .bmp 파일의 픽셀에도 적용될 수 있으며 이러한 .bmp 파일은 최적의 휴대성을 위해 더 작은 크기로 더 널리 사용되는 디지털 이미지 파일 형식으로 내보낼 수 있습니다.

.bmp 파일을 여는 방법?

.bmp 파일 또는 PC의 다른 파일을 두 번 클릭하여 실행합니다. 파일 연결이 올바르게 설정된 경우 ".bmp 파일을 열려는 응용 프로그램이 해당 파일을 엽니다. 올바른 응용 프로그램을 다운로드하거나 구입해야 할 수도 있습니다. PC에 올바른 응용 프로그램이 있지만 .bmp 파일이 아직 연결되지 않았을 수도 있습니다. 이 경우 .bmp 파일을 열려고 하면 해당 파일에 대해 어떤 응용 프로그램이 올바른지 Windows에 알릴 수 있습니다. 그때부터 .bmp 파일을 열면 올바른 응용 프로그램이 열립니다.

.bmp 파일을 여는 애플리케이션

마이크로소프트 윈도우용 어도비 포토샵 CS6

Microsoft Windows용 Adobe Photoshop CS6는 Windows 컴퓨터, 즉 Windows 7(SP 없음 및 SP1 포함) 및 Windows XP SP3에서 다운로드할 수 있는 이미지 편집 및 관리 소프트웨어입니다. 이 소프트웨어에는 디지털 이미지를 쉽고 빠르고 재미있게 고급 편집할 수 있는 새로운 기능과 도구가 포함되어 있습니다. 이 프로그램을 이미지 편집에 안정적으로 만드는 기능 중 하나는 더 빠르고 고품질의 성능을 제공하는 엔진 기술인 Adobe Mercury Graphics Engine입니다. 콘텐츠 인식 도구는 효과 없이 이미지를 자르고, 흐릿함이나 광각 렌즈 곡률을 자동으로 수정하고, 적목 현상을 제거하고, 밝기 및 대비와 같은 색상 균형을 조정할 수 있으므로 이미지를 쉽게 수정하기 위해 새롭게 설계된 기능입니다. 이 이미지 편집기에는 저장되지 않은 이미지를 백업할 수 있는 자동 복구 기능, 배경 저장 옵션, 흐림 갤러리, 자르기 도구, 비디오 생성 등이 번들로 포함되어 있습니다. 이러한 모든 새로운 향상된 기능과 현대적인 사용자 친화적인 인터페이스를 통해 Photoshop CS6 없이는 디지털 사진 편집이 그 어느 때보 다 재미있고 쉬울 수 없습니다.

Mac용 어도비 포토샵 CS6

Mac용 어도비 포토샵 CS6

Mac용 Adobe Photoshop CS6은 Mac 컴퓨터, 특히 64비트 Mac OS X v10.6~10.7 전용으로 설계된 "Creative Suite" 이미지 관리 소프트웨어 버전입니다. 이 이미지 편집 프로그램에는 빠르고 고품질의 이미지 향상 성능을 위해 같은 회사에서 개발한 Mercury Graphics Engine, 콘텐츠 인식 기능, 영화 디자인을 위해 직관적으로 재구성된 도구, 작업 흐름과 같은 새로운 기능 및 도구 세트가 번들로 제공됩니다. , 흐림 갤러리, 자르기 도구 등이 있습니다. Adobe Mercury 그래픽 엔진은 편집 작업을 쉽고 빠르게 완료할 수 있는 방식으로 작동합니다. 또한 자동 복구 및 배경 저장 옵션을 사용하여 이미지를 공유하고 마이그레이션할 수도 있습니다. 새로운 콘텐츠 인식 도구는 이미지를 수정하거나 향상하는 쉽고 제어 가능한 방법을 위해 만들어졌으며 결과적으로 더욱 만족스러운 출력을 제공합니다. 기본적으로 모든 사용자는 이미지를 자동 수정하고 자르고 광각 렌즈 곡률을 수정할 수 있습니다.

ACD 시스템 캔버스 14

ACD 시스템 캔버스 14

ACD 시스템 인터내셔널 주식회사 는 사용자가 데이터를 분석하고, 그래픽을 향상시키며, 모든 정보를 쉽고 빠르게 공유할 수 있게 해주는 기술 그래픽 솔루션 소프트웨어인 ACD Systems Canvas 14의 개발자입니다. 이 프로그램은 사용자가 기술 그래픽과 일러스트레이션을 정확하게 만드는 데 도움이 되는 모든 기능을 갖춘 도구로 설계되었습니다. 이미지 편집부터 객체 일러스트 도구까지 다양한 편집 도구로 구성되어 있습니다. 이 프로그램으로 생성된 모든 결과는 그래픽 및 엔지니어링과 관련된 모든 사업 분야의 프로젝트, 제안 및 기타 목적을 위한 좋은 프레젠테이션이 됩니다. 기능에 대한 자세한 내용을 보면 사용자는 개체 크기 조정 및 크기 조정, 모양 그리기, 획 및 채우기 잉크 또는 너비 삽입 등 편집 옵션을 사용하여 동일한 파일을 사용하여 래스터 이미지 및 벡터 그래픽으로 작업할 수 있습니다. 텍스트나 라벨, 형식 차원을 추가하고 차트를 생성하는 도구도 있습니다. 이 프로그램을 사용하면 사용자는 프레젠테이션이나 출판물을 통해 완성된 프로젝트를 공유할 수 있습니다.

ACD 시스템 ACD15 참조

ACD 시스템 ACD15 참조

ACD Systems ACDSee 15는 Microsoft Windows 및 Mac OS X 10.6(Windows XP 서비스 팩 2, Vista, 7 및 8; Mac OS X 10.5, 10.6)용 이미지 정리, 뷰어 및 RAW/이미지 편집 프로그램을 갖춘 사진 소프트웨어입니다. , 10.7 및 Mountain Lion). ACD Systems International, Inc.에서 개발했습니다. 원래는 16비트 애플리케이션으로 배포되었으나 나중에 32비트 버전으로 업그레이드되었습니다. 이 응용 프로그램에 대한 최소 하드웨어 요구 사항은 Intel Pentium III/AMD Athlon 프로세서 또는 동급 프로세서(512MB RAM(310MB 여유 하드 드라이브 공간 포함)), 1024 x 768 해상도의 하이 컬러 디스플레이 어댑터 및 CD/DVD 버너입니다. ACDSee는 GIF, BMP, JPG, PNG, MP3, PSD, WAV, MPEG 및 TIFF를 포함하는 형식의 비디오 및 오디오 파일을 관리하고 지원합니다. 사용자는 온라인으로 공유할 수 있는 사진 및 비디오 컬렉션을 보고, 편집하고, 효과를 추가하고 구성할 수 있습니다. 사진은 카메라나 기타 저장 장치에서 가져와서 정리할 수 있습니다. 또한 사용자가 GPS 지원 카메라에서 이미지의 위치를 ​​볼 수 있도록 하는 지도 보기 및 위치 정보 태그 지정 지원 기능도 제공합니다. 빠른 탐색, 스캔, 편집 및 백업 옵션과 같은 기능을 사용하면 날짜 및 이벤트별로 사진을 정렬하고 CD, DVD 및 Blu-Ray에 백업 복사본을 저장할 수 있습니다.

스프라이트를 화면 주위로 이동시키는 작은 프로그램을 고려했지만 불행히도 우리가 원하는 대로 보이지 않았습니다. 이 글에서 우리는 스프라이트를 "정리"하려고 노력할 것입니다.

우리는 Bmp 파일에서 스프라이트 이미지를 얻었으며 동일한 파일에서 배경, 마우스 커서 및 인터페이스 요소의 이미지를 가져올 수 있습니다. 그러나 화면에 보이는 것은 정확히 우리가 기대했던 것과 다릅니다. 이미지가 거꾸로 뒤집혀 있었고, 게다가 필요한 색상과도 달랐습니다. 이제 Bmp 파일을 올바르게 읽고 "머리부터 발끝까지" 그림을 바꾸는 방법을 배워 보겠습니다.

개발자의 결정에 따라 Bmp 파일 형식은 특정 하드웨어 플랫폼에 연결되지 않습니다. 이 파일은 헤더, 정보 헤더, 색상표(팔레트), 이미지 데이터의 네 부분으로 구성됩니다. 파일이 24비트(1,600만 색상)의 색상 깊이를 가진 이미지를 저장하는 경우 색상표가 누락될 수 있지만 256색 케이스에는 있습니다. 256 컬러 이미지를 저장하는 파일의 각 부분의 구조는 에 나와 있으며, 해당 레코드 유형은 에 나와 있습니다.

파일 헤더는 다음으로 시작합니다. 서명"BM" 뒤에 파일 길이가 옵니다(바이트 단위로 표시). 다음 4바이트는 추가 형식 확장을 위해 예약되어 있으며 이 헤더는 끝납니다. 배수량파일의 처음부터 그 안에 기록된 이미지 데이터까지. 256개 색상의 경우 이 오프셋은 1078입니다. 이는 데이터를 얻기 위해 이전 프로그램에서 건너뛰어야 했던 정확한 양입니다.

정보 헤더는 자체 길이(다양할 수 있지만 256색 파일의 경우 40바이트)로 시작하며 이미지 크기, 해상도, 색상 표현 특성 및 기타 매개변수를 포함합니다.

이미지 너비 및 높이래스터 지점에 지정되어 있으며 아마도 설명이 필요하지 않을 것입니다.

비행기 수색 농도가 낮은 파일에 사용할 수 있습니다. 색상 수가 256개 이상이면 항상 1과 같으므로 이 필드는 이제 더 이상 사용되지 않는 것으로 간주될 수 있지만 호환성을 위해 유지됩니다.

색상 심도색상이 파일에서 표현되고 도트당 비트 단위로 측정되는 방식의 가장 중요한 특성으로 간주됩니다. 이 경우에는 8과 같습니다.

압축.일반적으로 Bmp 파일에서는 사용되지 않지만 헤더의 필드가 제공됩니다. 일반적으로 0이며 이는 이미지가 압축되지 않음을 의미합니다. 앞으로는 그러한 파일만 사용할 것입니다.

이미지 크기- 팔레트 데이터를 계산하지 않고 이 이미지를 저장하는 데 필요한 메모리 바이트 수입니다.

수평 및 수직 해상도미터당 래스터 포인트로 측정됩니다. 이는 스캔한 이미지의 크기를 유지하는 데 특히 중요합니다. 그래픽 편집기를 사용하여 생성된 이미지는 일반적으로 이러한 필드에 0이 있습니다.

색상 수이미지에 실제로 선택한 색상 심도가 허용하는 것보다 적은 색상이 포함되어 있는 경우 팔레트 테이블의 크기를 줄일 수 있습니다. 그러나 실제로 이러한 파일은 거의 발견되지 않습니다. 색상 수가 색상 심도에서 허용하는 최대값인 경우(예: 8비트에서 256색) 필드는 0으로 설정됩니다.

기본 색상의 수- 팔레트의 처음부터 나오며, 왜곡 없이 표시하는 것이 좋습니다. 이 필드는 최대 표시 색상 수가 Bmp 파일 팔레트보다 적을 때 중요합니다. 형식을 개발할 때 가장 자주 발생하는 색상이 표의 시작 부분에 위치한다고 가정했습니다. 이제 이 요구 사항은 실제로 따르지 않습니다. 즉, 색상은 파일에서 발생하는 빈도에 따라 정렬되지 않습니다. 이는 동일한 색상으로 구성된 두 개의 서로 다른 파일의 팔레트에 서로 다른 순서로 포함되어 해당 이미지를 화면에 동시에 표시하는 것을 상당히 복잡하게 만들 수 있기 때문에 매우 중요합니다.

정보 헤더 다음에는 256개(색상 수) 4바이트 필드의 배열인 색상표가 옵니다. 각 필드는 팔레트의 색상에 해당하며 4바이트 중 3바이트는 해당 색상의 파란색, 녹색 및 빨간색 구성 요소에 해당합니다. 각 필드의 마지막 최상위 바이트는 예약되어 있으며 0과 같습니다.

색상표 다음에는 래스터 선을 따라 아래에서 위로, 선 내부에서 왼쪽에서 오른쪽으로 기록되는 이미지 데이터가 있습니다. 일부 플랫폼에서는 4바이트 미만의 데이터 단위를 읽는 것이 불가능하므로 각 줄의 길이는 4바이트 경계로 정렬됩니다. 즉, 줄 길이가 4의 배수가 아닌 경우 다음으로 채워집니다. 0. 파일을 읽을 때 이러한 상황을 고려해야 하지만 모든 이미지의 가로 크기가 4의 배수인지 미리 확인하는 것이 더 나을 수도 있습니다.

이미 말했듯이 파일 형식은 다양한 플랫폼에서 범용으로 설계되었으므로 팔레트 색상이 VGA의 일반적인 형식과 다르게 저장된다는 것은 놀라운 일이 아닙니다. 읽기 절차 중에 필요한 녹음이 수행됩니다. (다음 기사에서는 VGA 팔레트가 무엇인지, 어떻게 사용하는지에 대해 설명하겠습니다.)

256색 Bmp 파일을 읽는 모듈에는 두 가지 절차만 있습니다. 목록에서 볼 수 있듯이 이미지 크기는 ReadBMP 파일 읽기 절차에 전달되어야 합니다. 이는 이미지를 완전히 읽을 필요가 없을 때 편리합니다. 크기를 미리 알면 문제가 발생하지 않지만, 우리 모듈을 사용하면 크기를 미리 알 수 없는 이미지를 포함하여 모든 이미지를 읽을 수 있다면 좋을 것입니다. 이를 위해 파일 헤더만 읽는 ReadBMPheader 프로시저가 제공됩니다. 이를 호출하면 이미지가 선택한 256색 형식으로 기록되었는지 확인하고 크기를 확인한 다음 메모리를 할당하고 할당된 버퍼에 넣을 수 있습니다.

이제 우리 프로그램에 새 모듈을 연결해 보겠습니다. 이를 위해 사용 지시문에 해당 이름을 쓰고 다음과 같이 설명할 수 있는 팔레트에 대한 데이터를 저장하기 위한 배열도 제공합니다.

P: 바이트 배열;

새 모듈에서 파일을 읽는 작업을 호출하는 CreateSprite 프로시저가 단순화되었습니다(참조).

BMP 파일 구조

이름 길이 편견 설명
파일 헤더(BitMapFileHeader)
유형2 0 시그니처 "BM"
크기4 2 파일 크기
예약됨 12 6 예약된
예약됨 22 8 예약된
오프셋 비트4 10 파일 시작 부분의 이미지 오프셋
정보 헤더(BitMapInfoHeader)
크기4 14 헤더 길이
너비4 18 이미지 너비, 포인트
4 22 이미지 높이, 포인트
비행기2 26 비행기 수
비트카운트2 28 색상 심도, 도트당 비트 수
압축4 30 압축 유형(0 - 압축되지 않은 이미지)
크기이미지4 34 이미지 크기, 바이트
XpelsPerMeter4 38 수평 해상도, 미터당 도트 수
YpelsPerMeter4 42 수직 해상도, 미터당 도트 수
사용된 색상4 46 사용된 색상 수(0은 주어진 색상 깊이에 대해 가능한 최대값입니다)
색상중요4 50 기본 색상의 수
색상표(팔레트)
색상표1024 54 4바이트 요소 256개
이미지 데이터(비트맵 배열)
영상크기1078 왼쪽에서 오른쪽, 아래에서 위로 행으로 기록된 이미지

목록 1

단위 bmpread; (Bmp 작업 절차) 인터페이스 유형 artype = arrayof byte; arptr = ^artype; bmFileHeader = 레코드(파일 헤더) Typf: 단어; (서명) 크기: longint; (파일 길이(바이트)) Res1: 워드; (예약됨) Res2: 단어; (예약됨) OfBm: longint; (이미지 오프셋(바이트)(1078)) end; bmInfoHeader = 레코드(정보 헤더) 크기: longint; (헤더 길이(바이트)(40)) Widt: longint; (이미지 너비(픽셀 단위)) Heig: longint; (이미지 높이(픽셀 단위)) 계획: 단어; (평면 수(1)) BitC: 워드; (색상 심도(도트당 비트 수) (8)) Comp: longint; (압축 유형(0 - no)) SizI: longint; (이미지 크기(바이트)) XppM: longint; (수평 해상도) ((미터당 도트 수 - 일반적으로 0)) YppM: longint; (수직 해상도) ((미터당 도트 수 - 일반적으로 0)) NCoL: longint; (색상 수) ((허용되는 최대값이 0인 경우)) NCoI: longint; (원색의 수) end; bmHeader = 레코드(전체 파일 헤더) f: bmFileHeader; (파일 헤더) i: bmInfoHeader; (정보 헤더) p: 바이트 배열; (팔레트 테이블) 종료; bmhptr = ^bm헤더; (Bmp 파일에서 이미지 읽기) 절차 ReadBMP(image:arptr; (이미지가 있는 배열) xim,yim:word; (차원) pal:arptr; (팔레트) 파일 이름:string); (파일 이름) (Bmp 파일 헤더 읽기) 절차 ReadBMPheader(header:bmhptr;filename:string); 구현($R-)(Bmp 파일에서 이미지 읽기) 절차 ReadBMP(image:arptr; xim,yim:word; pal:arptr; filename:string); var h: bmHeader; i:정수; bmp파일: 파일; s: longint; 할당 시작(bmpfile,filename); 재설정(bmpfile,1); blockread(bmpfile,h,sizeof(h)); (헤더 읽기) for i:= 0 to yim-1 do start (한 줄씩 읽기) blockread(bmpfile,image^[(yim-i-1)*xim],xim); 만약 (xim 모드 4)<>0이면 blockread(bmpfile,s,4 - (xim mod 4)); 끝; 닫기(bmp파일); for i ^= 0 ~ 255 시작(팔레트 변환) pal^ := h.p shr 2; (파란색) pal^ := h.p shr 2; (녹색) pal^ := h.p shr 2; (빨간색) 끝; 끝; (Bmp 파일의 헤더 읽기) 절차 ReadBMPheader(header:bmhptr;filename:string); var bmp파일:파일; 할당 시작(bmpfile,filename); 재설정(bmpfile,1); blockread(bmpfile,header^,sizeof(header^)); 닫기(bmp파일); 끝; 끝.

목록 2

( 스프라이트) 프로시저 CreateSprite(s:string; x,y,dx,dy:integer); var f: 파일; (스프라이트 이미지가 있는 파일) start getmem(Sprt.Img,sizeof(SpriteArrayType)); (스프라이트에 대한 메모리 할당) getmem(Sprt.Back,sizeof(SpriteArrayType)); (버퍼용 메모리 할당) Readbmp(@(Sprt.Img^),Xsize,Ysize,@p,s); Sprt.x:= x; Sprt.y:=y; (초기값 설정) Sprt.dx:= dx; (좌표 및 증분) Sprt.dy:= dy; 끝;

발표

BMP 래스터 이미지 파일 형식

BMP(비트맵 파일, 장치 독립적 비트맵 파일 형식)는 디스플레이 장치와 별도로 디지털 비트맵 이미지를 저장하는 데 사용되는 비트맵 파일입니다. 이 파일 형식은 이전에 Microsoft Windows 및 OS/2에서 사용되었습니다. "래스터"라는 용어는 프로그래머의 비트맵 아이디어에서 유래되었습니다. BMP 이미지는 일반적으로 압축되지 않거나 무손실 압축됩니다(예: 파일에 중복 데이터가 있기 때문에 ZIP 또는 RAR 사용). 오늘날 JPG는 선호되는 이미지 형식입니다. 주로 BMP의 파일 크기가 크기 때문에 파일을 다운로드, 전송 또는 업로드할 때 문제나 지연이 발생할 수 있기 때문입니다.

BMP 파일에 대한 기술 정보

BMP 파일은 데이터 압축, 색상 프로필 또는 알파 채널 없이 다양한 크기, 색상 및 색상 심도의 2D 이미지로 저장됩니다. BMP 이미지는 장치 독립적인 비트맵(DIB) 형식으로 저장됩니다. 즉, 이미지에는 시스템 사양이 아닌 색상이 있습니다. 이는 일부 BMP ​​이미지가 컴퓨터에 따라 다르게 보이는 이유를 설명합니다. BMP 이미지는 컴퓨터와 TV 화면을 포함한 모든 장치에서 볼 수 있습니다. 특허가 부족하여 이 이미지 유형이 다양한 장치에서 널리 사용되는 형식이 되었습니다.

BMP 형식에 대한 추가 정보



 

다음 내용을 읽어보는 것이 도움이 될 수 있습니다.

 



파일 확장자 .bmp
파일 카테고리
예시 파일 (2.7MiB)
(487.85KiB)
관련 프로그램 어도비 포토샵
MS 페인트
마이크로소프트 사진 편집기
화필