| 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����) | |
#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 == 'B' | ('M' << 8) // 0x4D42 (CPU �����g���G���f�B�A���̏ꍇ)
bfType == ('B' << 8) | 'M' // 0x424D (CPU ���r�b�O�G���f�B�A���̏ꍇ)
�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
typedef struct tagBITMAPCOREHEADER {
DWORD bcSize; /* used to get to color table */
WORD bcWidth;
WORD bcHeight;
WORD bcPlanes;
WORD bcBitCount;
} BITMAPCOREHEADER;
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;
�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
�ǂ��g�������̂��킩��Ȃ��DWindows SDK v6.1 �̃}�j���A���� "biClrImportant" �Ō������Ă݂Ă��CbiClrImportant ���O�܂��͍ő�F���ɐݒ肵�Ă���Ⴕ��������Ȃ��D �쐬����Ƃ��͏�ɂO��ݒ肵�Ă������Ԃ� OK�D
| 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 |
| �萔�� | �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 �����̒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 |
���̍\���̂� 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;
| �萔�� | �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�}�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
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;
| �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
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;
BYTE bitmapData[<�������̖{��>][<�������̃o�C�g��>];
�r�b�g�}�b�v���w�b�_�� BITMAPV5HEADER �ŁC ���� bv5CSType �� PROFILE_LINKED �܂��� PROFILE_EMBEDDED �̏ꍇ�ɂ̂ݑ��݂���D
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
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
�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
|
|
|
|
����C���g���G���f�B�A�� CPU �ł͎��̂悤�ɂȂ�D
|
|
|
|
�܂����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(^^;))
���܂łɉ��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)
�摜�̕��� 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)
DWORD pixelsPerDW = 8 * sizeof(DWORD) / BPP; // DWORD ���̉�f�� // �������̃T�C�Y (DWORD ��) ���v�Z����D // ����� width / pixelsPerDW �̏��������グ���l�ł���D DWORD lineSizeDW = ICEIL(width, pixelsPerDW);
DWORD bytesPerPixel = BPP / 8; // �P��f������̃o�C�g�� // �܂��C�������̐����̃o�C�g�����v�Z����D DWORD lineSizeDW = bytesPerPixel * width; // lineSizeDW �����ۂ̃T�C�Y (DWORD ��) �ɂ��邽�߁C // sizeof(DWORD) �Ŋ��� (��������グ)�D lineSizeDW = ICEIL(lineSizeDW, sizeof(DWORD));
���Ɂ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;
��Ō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
�������C�h�̗��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 |