noocyte �̃v���O���~���O������ �`�v���O�����͊y�����ɑ���˂΂Ȃ�Ȃ���`

BMP�t�@�C���̃t�H�[�}�b�g

���J�F2006/09/21(��)
�ŏI�X�V�F2016/06/22(��)

�O�D�ڎ�

  1. BMP�t�@�C���̍\��
  2. BITMAPFILEHEADER �\���� (14�o�C�g)
  3. �r�b�g�}�b�v���w�b�_
    1. BITMAPCOREHEADER �\���� (12�o�C�g)
    2. BITMAPINFOHEADER �\���� (40�o�C�g)
    3. BITMAPV4HEADER �\���� (108�o�C�g)
    4. BITMAPV5HEADER �\���� (124�o�C�g)
  4. �J���[�}�X�N�^�J���[�e�[�u��
  5. �r�b�g�}�b�v�f�[�^
  6. �v���t�@�C���f�[�^
  7. ����
  8. �Q�l�R�[�f�B���O�� (C/C++)
    1. �r�b�g�}�b�v�f�[�^�T�C�Y (�������̃o�C�g������ёS�o�C�g��) �̌v�Z
    2. �w�b�_���̍쐬
  9. �T�C�g���֘A�y�[�W
  10. �O���ւ̃����N
  11. �X�V����

�P�DBMP�t�@�C���̍\��


BITMAPFILEHEADER �\����
BITMAPINFO �r�b�g�}�b�v���w�b�_
(���L�̂����ꂩ�̍\����)
�J���[�}�X�N (BI_BITFIELDS �̏ꍇ�̂�)
�J���[�e�[�u�� (1/4/8 BPP �ł͕K�{�C16/24/32 BPP �ł̓I�v�V����)
(�����Ɍ��Ԃ�����ꍇ������D(�Ȃ��ꍇ�� packed bitmap �ƌĂ΂��D))
�r�b�g�}�b�v�f�[�^
�v���t�@�C���f�[�^ (�I�v�V����)

��BMP�t�@�C�����̍\���̂Ɋւ��钍��

�Q�DBITMAPFILEHEADER �\���� (14�o�C�g)

#include <pshpack2.h>
typedef struct tagBITMAPFILEHEADER {
  WORD  bfType;
  DWORD bfSize;         /* DWORD (�S�o�C�g) ���E���A���C������Ă��Ȃ��_�ɒ��ӁD*/
  WORD  bfReserved1;
  WORD  bfReserved2;
  DWORD bfOffBits;      /* DWORD (�S�o�C�g) ���E���A���C������Ă��Ȃ��_�ɒ��ӁD*/
} BITMAPFILEHEADER;
#include <poppack.h>
bfType
BMP �t�@�C���ł��邱�Ƃ������Q�o�C�g�l�D��P�o�C�g�� 'B' (0x42)�C��Q�o�C�g�� 'M' (0x4D)�D �‚܂�C
bfType == 'B' | ('M' << 8)   // 0x4D42 (CPU �����g���G���f�B�A���̏ꍇ)
bfType == ('B' << 8) | 'M'   // 0x424D (CPU ���r�b�O�G���f�B�A���̏ꍇ)
bfSize
BMP �t�@�C���̃T�C�Y (�o�C�g��)�D

�O��f�^�����Ȓl�������Ă��邱�Ƃ�����̂ŁC �ǂނƂ��ɂ͂�����A�e�ɂ��Ă͂����Ȃ��D �t�@�C���S�̂̃T�C�Y��m��Ȃ��Ă� BMP �t�@�C���͓ǂ߂�D ���������CBMP �t�@�C�����ۂ��ƃ������ɓǂݍ��ނƂ����̂͂��܂�ǂ����@�ł͂Ȃ��D BITMAPINFO ���r�b�g�}�b�v�f�[�^�̊Ԃɕs�v�Ȍ��Ԃ�����ꍇ�����邵�C BITMAPFILEHEADER �͓Ǎ��݌�͕s�v�ł��� (�ꍇ�ɂ���Ă� BITMAPINFO ��)�D

bfReserved1�CbfReserved2
�\�񂳂�Ă���D�O�łȂ���΂Ȃ�Ȃ��D
bfOffBits
���̍\���̂̐擪 (�‚܂� BMP �t�@�C���̐擪) �����r�b�g�}�b�v�f�[�^�܂ł̃o�C�g�E�I�t�Z�b�g�D

�R�D�r�b�g�}�b�v���w�b�_

�R.�P BITMAPCOREHEADER �\���� (12�o�C�g)

typedef struct tagBITMAPCOREHEADER {
  DWORD bcSize;     /* used to get to color table */
  WORD  bcWidth;
  WORD  bcHeight;
  WORD  bcPlanes;
  WORD  bcBitCount;
} BITMAPCOREHEADER;

�R.�Q BITMAPINFOHEADER �\���� (40�o�C�g)

typedef struct tagBITMAPINFOHEADER {
  DWORD biSize;
  LONG  biWidth;
  LONG  biHeight;
  WORD  biPlanes;
  WORD  biBitCount;
  DWORD biCompression;
  DWORD biSizeImage;
  LONG  biXPelsPerMeter;
  LONG  biYPelsPerMeter;
  DWORD biClrUsed;
  DWORD biClrImportant;
} BITMAPINFOHEADER;
biSize
���̍\���̂̃T�C�Y (�o�C�g��)�D
biWidth
�r�b�g�}�b�v�̕� (��f��)�D
biCompression �� BI_JPEG �܂��� BI_PNG �̏ꍇ�CbiWidth �͉𓀂��ꂽ JPEG �܂��� PNG �摜�̕���\���D
biHeight
�r�b�g�}�b�v�̍��� (��f��)�DbiHeight��0 �Ȃ�΃{�g���A�b�v DIB �ł���C ���̌��_�͍������ł���DbiHeight��0 �Ȃ�΃g�b�v�_�E�� DIB �ł���C ���_�͍�����ł���D �g�b�v�_�E�� DIB �̏ꍇ�CbiCompression �� BI_RGB �܂��� BI_BITFIELDS �łȂ���΂Ȃ炸�C���k�͂ł��Ȃ��D
biCompression �� BI_JPEG �܂��� BI_PNG �̏ꍇ�CbiWidth �͉𓀂��ꂽ JPEG �܂��� PNG �摜�̍�����\���D
biPlanes
�^�[�Q�b�g�E�f�o�C�X�̃v���[���̖����D�P�łȂ���΂Ȃ�Ȃ��D
biBitCount
�P��f������̃r�b�g�� (Bits-Per-Pixel�CBPP)�D �L���Ȓl���\ 3.2-1 ���Q�ƁD
biCompression
�r�b�g�}�b�v�̈��k�������w�肷��D�g�b�v�_�E�� DIB �͈��k�ł��Ȃ��D �L���Ȓl���\ 3.2-2 ���Q�ƁD
biSizeImage
�r�b�g�}�b�v�f�[�^�̃T�C�Y (�o�C�g��)�D BI_RGB �̏ꍇ�͂O�ł��悢�D
BI_JPEG �܂��� BI_PNG �̏ꍇ�C biSizeImage �͂��ꂼ�� JPEG �܂��� PNG �̉摜�o�b�t�@�̃T�C�Y�������D

�O��f�^�����Ȓl�������Ă��邱�Ƃ�����̂ŁC ������A�e�ɂ��Ă͂����Ȃ��D��q����悤�� BI_RGB �� BI_BITFIELDS �̏ꍇ�CbiSizeImage �̐������l�� biWidth�CbiHeight�CbiBitCount ����v�Z���邱�Ƃ��ł���̂ŁC ���̒l���g���K�v�͂Ȃ��D

biXPelsPerMeter, biYPelsPerMeter
���ꂼ��C�^�[�Q�b�g�E�f�o�C�X�̐�������ѐ����𑜓x (�P�ʂ͉�f��/��)�D �A�v���P�[�V�����͂����̒l���C ���\�[�X�O���[�v�̒�����f�o�C�X�ɍœK�ȃr�b�g�}�b�v��I�����邽�߂Ɏg�p���Ă��悢�D
biClrUsed
�r�b�g�}�b�v�����ۂɎg�p����J���[�e�[�u���̃G���g�����D
biClrUsed��0 �̏ꍇ�C�r�b�g�}�b�v�� biBitCount �ɑΉ�����ő�F�����g�p����D
biClrUsed��0 ���� biBitCount��16 �̏ꍇ�CbiClrUsed �͎��ۂɎg�p�����F���D
biBitCount��16 �̏ꍇ�CbiClrUsed �̓V�X�e���J���[�p���b�g�̐��\���œK������̂ɗp������J���[�e�[�u���̃T�C�Y�D
biBitCount��16 �܂��� 32 �̏ꍇ�C�œK�J���[�p���b�g�͂R�‚� DWORD �}�X�N�̒��ォ��n�܂�D
biClrImportant
�r�b�g�}�b�v��\������̂ɕK�v�ȐF�� (�� �J���[�e�[�u���̃G���g����)�D�O�Ȃ�΂��ׂĂ̐F���K�v�D

�ǂ��g���΂����̂��킩��Ȃ��DWindows SDK v6.1 �̃}�j���A���� "biClrImportant" �Ō������Ă݂Ă��CbiClrImportant ���O�܂��͍ő�F���ɐݒ肵�Ă���Ⴕ�����‚���Ȃ��D �쐬����Ƃ��͏�ɂO��ݒ肵�Ă����΂��Ԃ� OK�D


�\ 3.2-1 biBitCount (BPP) �̗L���Ȓl
BPP �Ӗ�
0 ���ۂ� BPP �́CJPEG �܂��� PNG �t�H�[�}�b�g�Ŗ����܂��͈Î������D
1 ���m�N���[���E�r�b�g�}�b�v�ł���C �r�b�g�}�b�v�f�[�^�̊e�r�b�g����f��\���D�o�C�g���̏�ʂ̃r�b�g�����D �J���[�e�[�u���͂Q�‚̃G���g�������D ��f�r�b�g���O�Ȃ�� bmiColors[0] �ɁC�P�Ȃ�� bmiColors[1] �ɑΉ�����D
4 �ő�16�F�ł���C�J���[�e�[�u���͍ő�16�G���g�������D �r�b�g�}�b�v�f�[�^�̊e�j�u�����P��f��\���D�o�C�g���̏�ʂ̃j�u�������D
8 �ő�256�F�ł���C�J���[�e�[�u���͍ő�256�G���g�������D �r�b�g�}�b�v�f�[�^�̊e�o�C�g���P��f��\���D
16 �ő� 216 �F�D�r�b�g�}�b�v�f�[�^�̊e WORD ���P��f��\���D
24 �ő� 224 �F�D �r�b�g�}�b�v�f�[�^�̘A������R�o�C�g���P��f��\���D
32 �ő� 232 �F�D �r�b�g�}�b�v�f�[�^�̊e DWORD ���P��f��\���D

�\ 3.2-2 biCompression �̗L���Ȓl
�萔�� �l ����
BI_RGB 0 �񈳏k�`���D
BI_RLE8 1 8 BPP �p���������O�X������ (RLE) �`���D ���̌`���́C�P�o�C�g�̃J�E���g�l�̌�ɂP�o�C�g�̃J���[�C���f�b�N�X�������Q�o�C�g�`���ł���D
�Q�l�FBitmap�t�@�C���t�H�[�}�b�g
BI_RLE4 2 4 BPP �p���������O�X������ (RLE) �`���D
�Q�l�FBitmap�t�@�C���t�H�[�}�b�g
BI_BITFIELDS 3 �񈳏k�`���ł���C�J���[�e�[�u���� R, G, B �̃J���[�}�X�N���w�肷��R�‚̃G���g������Ȃ�D ���̌`���� 16 BPP �� 32 BPP �̂Ƃ��Ɍ���L���D
BI_JPEG 4

���ꂼ��CJPEG/PNG �摜�ł��邱�Ƃ������D

���ӁF������BMP�u�t�@�C���v�Ŏg�p���邽�߂̒l�ł͂Ȃ��D
(����Ⴛ�����DJPEG/PNG �摜���g��������� JPEG/PNG �t�@�C���ɂ���΂����킯�ŁC BMP �t�@�C���ɓ���Ă����ʂɃw�b�_�T�C�Y�������邾���ʼn������ꂵ���Ȃ��D)

�����̒l�́C SetDIBitsToDevice() �� StretchDIBits() ��p���āCJPEG��PNG�摜���T�|�[�g�����v�����^�� JPEG/PNG �f�[�^�����̂܂܏o�� (�ۓ����CJPEG/PNG pass-through) ����ꍇ�Ɏg�p���邽�߂̂��́D(Win32 API (GDI) �������� API �ɑ΂��� JPEG/PNG �̈��k�E�L�����T�|�[�g����킯�ł͂Ȃ��D)

�Q�l

BI_PNG 5

�R.�R BITMAPV4HEADER �\���� (108�o�C�g)

���̍\���̂� BITMAPINFOHEADER �\���̂̊g���łł���D

Windows NT 3.51 �ȑO�F�A�v���P�[�V������ BITMAPINFOHEADER ���p���g�p���ׂ��D

�A�v���P�[�V�����͐V���ɒlj����ꂽ�@�\���g�p���邽�� BITMAPV5HEADER ���g�p���Ă��悢�D

typedef struct {
  DWORD        bV4Size;
  LONG         bV4Width;
  LONG         bV4Height;
  WORD         bV4Planes;
  WORD         bV4BitCount;
  DWORD        bV4V4Compression; /* V4 ���Q��J��Ԃ��Ă���̂� WinGDI.h �̃~�X�^�C�v�H */
  DWORD        bV4SizeImage;
  LONG         bV4XPelsPerMeter;
  LONG         bV4YPelsPerMeter;
  DWORD        bV4ClrUsed;
  DWORD        bV4ClrImportant;
  DWORD        bV4RedMask;
  DWORD        bV4GreenMask;
  DWORD        bV4BlueMask;
  DWORD        bV4AlphaMask;
  DWORD        bV4CSType;
  CIEXYZTRIPLE bV4Endpoints;
  DWORD        bV4GammaRed;
  DWORD        bV4GammaGreen;
  DWORD        bV4GammaBlue;
} BITMAPV4HEADER, FAR *LPBITMAPV4HEADER, *PBITMAPV4HEADER;
bV4Size
���̍\���̂̃T�C�Y (�o�C�g��)�D�A�v���P�[�V�����͂��̒l��p���āC �ǂ̃r�b�g�}�b�v���w�b�_�\���̂��g���Ă���̂��𔻒f���ׂ��ł���D
bV4Width
BITMAPINFOHEADER::biWidth �Ɠ��l�D
bV4Height
BITMAPINFOHEADER::biHeight �Ɠ��l�D
bV4Planes
BITMAPINFOHEADER::biPlanes �Ɠ��l�D
bV4BitCount
BITMAPINFOHEADER::biBitCount �Ɠ��l�D
bV4V4Compression
BITMAPINFOHEADER::biCompression �Ɠ��l�D
bV4SizeImage
BITMAPINFOHEADER::biSizeImage �Ɠ��l�D
bV4XPelsPerMeter, bV4YPelsPerMeter
BITMAPINFOHEADER::biXPelsPerMeter�C BITMAPINFOHEADER::biYPelsPerMeter �Ɠ��l�D
bV4ClrUsed
���L�̓_�������CBITMAPINFOHEADER::biClrUsed �Ɠ��l�D
biBitCount��16 �܂��� 32 �̏ꍇ�C�œK�J���[�p���b�g�� BITMAPV4HEADER �̒�������n�܂�D
bV4ClrImportant
BITMAPINFOHEADER::biClrImportant �Ɠ��l�D
bV4RedMask, bV4GreenMask�C bV4BlueMask, bV4AlphaMask
bV4V4Compression��BI_BITFIELDS �̂Ƃ��Ɍ���L���D ���ꂼ��C�e��f�� R�CG�CB�C�A���t�@�v�f�̃J���[�}�X�N�D
bV4CSType
DIB �̐F��Ԃ��w�肷��D�L���Ȓl�͉��L�̂Ƃ���D
�萔�� �l ����
LCS_CALIBRATED_RGB 0x00000000 endpoints �ƃK���}�l�����ꂼ�� bV4Endpoints �� bV4Gamma{Red,Green,Blue} �Ɏw�肳��Ă��邱�Ƃ������D
LCS_sRGB 'sRGB'
(0x73524742)
sRGB�D
LCS_WINDOWS_COLOR_SPACE 'Win '
(0x57696E20)
�V�X�e���̃f�t�H���g�F��� (sRGB)�D
PROFILE_LINKED 'LINK'
(0x4C494E4B)
(V5 ��p) bV5ProfileData �̓J���[�v���t�@�C���̃t�@�C���� (NUL �I�[ Windows-1252 ������) ���w���DbV5Endpoints �� bV5Gamma* �͖��������D
PROFILE_EMBEDDED 'MBED'
(0x4D424544)
(V5 ��p) bV5ProfileData �͎g�p����v���t�@�C�����܂ރ������o�b�t�@���w���D
�_���F��Ԃ��`������ɂ‚��Ă� LOGCOLORSPACE �\���̂��Q�ƁD
bV4Endpoints
���C���C���̊e endpoint �ɑΉ�����C �_���F��Ԃ� x�Cy�Cz ���W���w�肷�� CIEXYZTRIPLE �\���́D bV4CSType��LCS_CALIBRATED_RGB �̂Ƃ��Ɍ���L���D

�⑫�F�}�j���A���ɂ͂��܂�������Ȃ����C�����ł����g�_���F��ԁh�� CIE 1931 XYZ �F������w���ƍl������D���̋�Ԃ̒������C���C���ɑΉ�����R�‚� endpoint (RGB ���F���ƂȂ�O�p�`�̒��_) ���w�肷�邱�ƂŁC���܂��܂� RGB �F��Ԃ��`���邱�Ƃ��ł����D�܂��C�}�j���A���ɂ� "x, y, z" �Ə������ŏ�����Ă��邪�C"X, Y, Z" (�啶��) ���������͂� (�������� xyz ���W�ɂ͋P�x��񂪂قƂ�NJ܂܂�Ȃ�)�D

bV4GammaRed, bV4GammaGreen, bV4GammaBlue
�e�F�����̃K���}�l�� 16.16 �`�� (������16bit�{������16bit�̌Œ菬���_��) �ŕ\���DbV4CSType��LCS_CALIBRATED_RGB �̂Ƃ��Ɍ���L���D

�R.�S BITMAPV5HEADER �\���� (124�o�C�g)

typedef struct {
  DWORD        bV5Size;
  LONG         bV5Width;
  LONG         bV5Height;
  WORD         bV5Planes;
  WORD         bV5BitCount;
  DWORD        bV5Compression;
  DWORD        bV5SizeImage;
  LONG         bV5XPelsPerMeter;
  LONG         bV5YPelsPerMeter;
  DWORD        bV5ClrUsed;
  DWORD        bV5ClrImportant;
  DWORD        bV5RedMask;
  DWORD        bV5GreenMask;
  DWORD        bV5BlueMask;
  DWORD        bV5AlphaMask;
  DWORD        bV5CSType;
  CIEXYZTRIPLE bV5Endpoints;
  DWORD        bV5GammaRed;
  DWORD        bV5GammaGreen;
  DWORD        bV5GammaBlue;
  DWORD        bV5Intent;
  DWORD        bV5ProfileData;
  DWORD        bV5ProfileSize;
  DWORD        bV5Reserved;
} BITMAPV5HEADER, FAR *LPBITMAPV5HEADER, *PBITMAPV5HEADER;
bV5Size
BITMAPV4HEADER::bV4Size �Ɠ��l�D
bV5Width
BITMAPINFOHEADER::biWidth �Ɠ��l�D
bV5Height
BITMAPINFOHEADER::biHeight �Ɠ��l�D
bV5Planes
BITMAPINFOHEADER::biPlanes �Ɠ��l�D
bV5BitCount
BITMAPINFOHEADER::biBitCount �Ɠ��l�D
bV5Compression
BITMAPINFOHEADER::biCompression �Ɠ��l�D
bV5SizeImage
BITMAPINFOHEADER::biSizeImage �Ɠ��l�D
bV5XPelsPerMeter, bV5YPelsPerMeter
BITMAPINFOHEADER::biXPelsPerMeter�C BITMAPINFOHEADER::biYPelsPerMeter �Ɠ��l�D
bV5ClrUsed
BITMAPINFOHEADER::biClrUsed �Ɠ��l�D
bV5ClrImportant
BITMAPINFOHEADER::biClrImportant �Ɠ��l�D
bV5RedMask, bV5GreenMask�C bV5BlueMask, bV5AlphaMask
���ꂼ��C BITMAPV4HEADER::bV4RedMask, BITMAPV4HEADER::bV4GreenMask, BITMAPV4HEADER::bV4BlueMask, BITMAPV4HEADER::bV4AlphaMask �Ɠ��l�D
bV5CSType
BITMAPV4HEADER::bV4CSType �Ɠ��l�D
bV5Endpoints
BITMAPV4HEADER::bV4Endpoints �Ɠ��l�D
bV5GammaRed, bV5GammaGreen, bV5GammaBlue
���ꂼ��C BITMAPV4HEADER::bV4GammaRed, BITMAPV4HEADER::bV4GammaGreen, BITMAPV4HEADER::bV4GammaBlue �Ɠ��l�D
bV5Intent
�����_�����O�C���e���g (rendering intent�C�`��Ӑ}�C�F��Ԃ̕ϊ����@)�D�”\�Ȓl�͎��̂Ƃ���D

�l �Ӑ} ICC�� �Ӗ�
LCS_GM_ABS_COLORIMETRIC ��v
(Match)
��ΓI��
�F�ʂ��ێ�
(Absolute Colorimetric)
�ϊ���̐F�� (color gamut) ���̍ł��߂��F���̗p����D�摜�̋P�x��ύX����”\�������锒�_�ƍ��_�̒������s��Ȃ��D
LCS_GM_GRAPHICS �Z����
(Proof)
���ΓI��
�F�ʂ��ێ�
(Relative Colorimetric)
�ϊ����ʂ��ϊ���̐F��Ɏ��܂�ꍇ�͉������Ȃ��D�͂ݏo���ꍇ�ɂ͐F����̍ł��߂��F�ɒu��������D���̂��߁C�قȂ�F�������F�ɕϊ������ꍇ������D
LCS_GM_IMAGES �ʐ^
(Picture)
�m�o (Perceptual) �R���g���X�g���ێ�����D�ʐ^�⎩�R�ȉ摜�����D�ϊ����ʂ��ϊ���̐F��Ɏ��܂�Ȃ��ꍇ�C�ϊ����ʑS�̂̐F����k�����ĕϊ���Ɏ��߂�D
LCS_GM_BUSINESS �}
(Graphic)
�ʓx (Saturation) �r�W�l�X�E�O���t�B�b�N�X��f�B�U�Ȃ��̐F���K�v�ȏꍇ�����D�F�̑��ΓI�ʓx���ێ�����D

���Q�l

bV5ProfileData
BITMAPV5HEADER �\���̂̐擪����v���t�@�C���f�[�^�̐擪�܂ł̃o�C�g�E�I�t�Z�b�g�D�v���t�@�C���f�[�^�̖{�͎̂��̂Ƃ���D
  • bV5CSType��PROFILE_LINKED �̏ꍇ
    �v���t�@�C���̃t�@�C���� (NUL �I�[������)�D Unicode ������͕s�DWindows-1252 �łȂ��ƃ_���D(�Ȃ�ł�˂�I)
  • bV5CSType��PROFILE_EMBEDDED �̏ꍇ
    �ڍׂ� Using Structures in WCS 1.0 ���Q�� (������Ɩʓ|�����Ȃ̂ł܂������Ɠǂ�ł��Ȃ�)�D
�Q�l�FUsing Structures in WCS 1.0
bV5ProfileSize
���ߍ��܂ꂽ�v���t�@�C���f�[�^�̃T�C�Y (�o�C�g��)�D
bV5Reserved
�����̂��߂ɗ\�񂳂�Ă���D�O�łȂ���΂Ȃ�Ȃ��D

�S�D�J���[�}�X�N�^�J���[�e�[�u��

BITMAPINFO::bmiColors �� RGBQUAD[1] �Ƃ��Đ錾����Ă��邪�C�}�j���A����ǂތ�����ۂɂ͎��̂悤�ȍ\���ɂȂ� (�͂�)�D

struct {
#if biCompression == BI_BITFIELDS
  struct {
    DWORD red;
    DWORD green;
    DWORD blue;
  } colorMask;
#endif /* biCompression == BI_BITFIELDS */
  RGBQUAD colorTable[biClrUsed];
} bmiColors;

�T�D�r�b�g�}�b�v�f�[�^

BYTE bitmapData[<�������̖{��>][<�������̃o�C�g��>];

�U�D�v���t�@�C���f�[�^

�r�b�g�}�b�v���w�b�_�� BITMAPV5HEADER �ŁC ���� bv5CSType �� PROFILE_LINKED �܂��� PROFILE_EMBEDDED �̏ꍇ�ɂ̂ݑ��݂���D


�V�D����

�V.�P  �SBPP�ȉ��̉摜�𕡐� (�Q�܂��͂S) �o�C�g�P�ʂŏ�������ꍇ

4 BPP �ȉ��̉摜�ł́C�P�o�C�g�ɕ����̉�f�l�������Ă���D �������͂S�o�C�g���E���A���C������Ă���̂ŁC �S�o�C�g�P�� (�ꍇ�ɂ���Ă͂Q�o�C�g�P��) �ŏ������邱�Ƃɂ�荂������}�邱�Ƃ��”\�����C ���̓_�ɒ��ӂ���K�v������D

�P�o�C�g�̒��ł́C���������̉�f�͏�ʃr�b�g���牺�ʃr�b�g�Ɍ������Ċi�[�����D �‚܂�o�C�g���ł̉�f�̊i�[�����̓r�b�O�G���f�B�A���ł���D 1 BPP �̏ꍇ�C�o�C�g���̊e�r�b�g�͎��̂悤�Ȕz�u�ʼn摜�ɕ\�������D �}���̔ԍ��̓o�C�g���̃r�b�g�ʒu��\�� (LSB��0�CMSB��7)�D

76543210

�r�b�g�}�b�v�f�[�^�𕡐��o�C�g�P�ʂŏ�������ꍇ�CCPU �̃G���f�B�A�������ƂȂ�D �r�b�g�}�b�v�f�[�^�̂S�o�C�g���P�‚̂S�o�C�g�����Ƃ��Ĉ����ꍇ�C �r�b�O�G���f�B�A�� CPU �ł͐������̊e�r�b�g�͎��̂悤�Ȕz�u�ʼn摜�ɕ\������� (LSB��0�CMSB��31)�D

31302928 27262524
23222120 19181716
15141312 111098
76543210

����C���g���G���f�B�A�� CPU �ł͎��̂悤�ɂȂ�D

76543210
15141312 111098
23222120 19181716
31302928 27262524

�‚܂����g���G���f�B�A�� CPU �ł́C �Q�o�C�g�܂��͂S�o�C�g�������̃r�b�g (��f) ���ƁC �摜��̉�f������v���Ă��Ȃ��D ���̂��߃r�b�g�}�b�v�f�[�^���o�C�g�P�ʂŏ������Ă����̂��C �������̂��߂��̂܂܂Q�o�C�g�܂��͂S�o�C�g�P�ʂŏ�������悤�ɕύX���悤�Ƃ��Ă��C ��f�̏����������Ă��܂��Ă��܂������Ȃ��ꍇ������D
(�����ŋ߂�����Ⴂ�܂����D(^^;))


�W�D�Q�l�R�[�f�B���O�� (C/C++)

���܂łɉ��x���C���l�l�̏����� BMP �t�@�C����ǂݏ�������R�[�h������@����������C ���܂�ɂЂǂ����̂������‚��������̂ŁC�����ɎQ�l�R�[�f�B���O����ڂ��邱�Ƃɂ����D �u�Ђǂ��v�̓��e�͎��̂Ƃ���D

�Ƃ肠�����C�o�O�̌����ɂȂ�₷���C �r�b�g�}�b�v�f�[�^�T�C�Y�̌v�Z���@�𒆐S�ɏ������Ƃɂ���D
(���̂����C���������瑼�̕����������܂��D)

�W.�P �r�b�g�}�b�v�f�[�^�T�C�Y (�������̃o�C�g������ёS�o�C�g��) �̌v�Z

�摜�̕��� width�C������ height �Ƃ���D �܂��C�P�{�̑������̃T�C�Y (DWORD ��) lineSizeDW �����̂悤�ɂ��Čv�Z����D (8 BPP �̏ꍇ�͂ǂ���̕��@�ł��悢�D �܂� 2 BPP �� BMP �t�@�C���̎d�l�ɂ͊܂܂�Ă��Ȃ����C �������݂��Ă� 1 BPP �� 4 BPP �̏ꍇ�Ɠ��l�Ɍv�Z�ł���D)

���ɁC�������̃T�C�Y (�o�C�g��) lineSize �ƃr�b�g�}�b�v�f�[�^�̑S�o�C�g�� imageSize �����߂�D

DWORD lineSize = lineSizeDW * sizeof(DWORD);
DWORD imageSize = lineSize * height;

�W.�Q �w�b�_���̍쐬

��Ōv�Z���� lineSize�CimageSize ��p���Ď��̂悤�Ƀw�b�_����ݒ肷��D

BITMAPFILEHEADER bf;
BITMAPINFOHEADER bi;

// �w�b�_�T�C�Y�̍��v
const DWORD headerSize = sizeof(bf) + sizeof(bi);

// �J���[�e�[�u���̃G���g���� nColors ���v�Z����D
// RGB �J���[ (BPP��8) �̏ꍇ�͂Ȃ����̂Ƃ���D
unsigned nColors = (BPP <= 8) ? (1U << BPP) : 0;

// �J���[�e�[�u���̃T�C�Y (�o�C�g��) ���v�Z����D
DWORD colorTableSize = sizeof(RGBQUAD) * nColors;

bf.bfType = 'B' | ('M' << 8);
bf.bfReserved1 = 0;
bf.bfReserved2 = 0;
bf.bfOffBits = headerSize + colorTableSize;     // packed bitmap
bf.bfSize = bf.bfOffBits + imageSize;

bi.biSize = (DWORD)sizeof(bi);
bi.biWidth = (LONG)width;
bi.biHeight = (LONG)height;
bi.biPlanes = 1;
bi.biBitCount = (WORD)BPP;
bi.biCompression = BI_RGB;
bi.biSizeImage = imageSize;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = nColors;
bi.biClrImportant = 0;
2007/08/12(��) �NjL

�ȏ�̓��g���G���f�B�A�� CPU �p�Ȃ̂ŁC�r�b�O�G���f�B�A�� CPU ���g�p���ăw�b�_���t�@�C���ɏ����o���ꍇ�͍Ō�� bf ����� bi �̑S�����o�̃G���f�B�A���𔽓]�����邱�ƁD


�X�D�T�C�g���֘A�y�[�W


�P�O�D�O���ւ̃����N

�������C�h�̗��D


�P�P�D�X�V����

  1. 2006/09/21(��) �������������Ƃ肠�������J�D
  2. 2006/10/19(��) �Ƃ肠�����O���ւ̃����N��lj��D
  3. 2006/10/27(��) ���ӁF�SBPP�ȉ��̉摜�𕡐� (�Q�܂��͂S) �o�C�g�P�ʂŏ�������ꍇ��lj��D
  4. 2007/01/20(�y) BITMAPV4HEADER �\��������� BITMAPV5HEADER �\�����̊e�����o�̐�����NjL�� (������)�D (�ł��܂��F�Ǘ��p��ɂ‚��Ă͗������Ă��Ȃ��D(^^;))
  5. 2007/02/25(��) BITMAP*HEADER �\���̂̃T�C�Y (�o�C�g��) ��NjL�D
  6. 2007/03/04(��) �Q�l�R�[�f�B���O�� (C/C++) ��lj��D
  7. 2007/03/12(��)
  8. 2007/04/18(��) BMP�t�@�C���̍\���}�ɁCBITMAPINFO �̌�̌��Ԃ�NjL�D
  9. 2007/06/23(�y) �O���ւ̃����N��lj��E�����D
  10. 2007/07/29(��) bfType�CbfSize�C biSizeImage �̐����ɒNjL�D
  11. 2007/08/12(��) �w�b�_���̍쐬�ɁC �r�b�O�G���f�B�A�� CPU �Ńw�b�_�������o���ꍇ�̒��ӏ�����NjL�D
  12. 2008/06/26(��)�u�T�C�g���֘A�y�[�W�v��Y��Ă����̂Œlj��D
  13. 2012/12/21(��)�uBI_JPEG/BI_PNG�v�̐�����NjL�D
  14. 2014/07/31(��)�ubV5Intent�v�̐�����NjL�D
  15. 2016/06/22(��) �J���[�}�l�W�����g�֘A�����o�̐�����NjL�D


Copyright © 2006-2017 noocyte
E-mail: relipmoced (a) yahoo.co.jp
  (" (a) " �𔼊p�̃A�b�g�}�[�N�ɏ����ւ��Ă��������D)
�����N�͂����R�ɁD
�unoocyte �̃v���O���~���O�������v�g�b�v�y�[�W�ɖ߂�D