|
|||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
|
|
5. ���̷�Ʈ �ķ�Ʈ ����
���̷�Ʈ�� �Ẹ�� �е��� 8��Ʈ(256 color) �̻��� �����Ѵٴ�
���� �˰� ���� �̴ϴ�. ���� ���� �÷� ���ٵ� 8��Ʈ�����
��
ô�̳� ���ϴٰ� �Ҽ� �ִ�����~
�翬 ���� ���ӵ��� 8��Ʈ�� ���� �ϰ� ���������� 8��Ʈ����
������ �����ص� �����ϱ� ��������~
�������� �Խö��� ���� �ѵ��� 16��Ʈ Į�� ����
���� �ϰ�
��������~ (��...--; )
���̷�Ʈ���� �ķ�Ʈ�� ó���ϴ� ������ ���� ���� ������
��
�� ����ǥ�� ������ �Ǿ� ���ϴ�.
+---------------------------------------------------------+
| �ȷ�Ʈ
���� (DDLoadPalette) |
+---------------------------------------------------------+
|
+---------------------------------------------------------+
| ������ �ȷ�Ʈ��
���� ���ۿ� ����(SetPalette) |
+---------------------------------------------------------+
|
+---------------------------------------------------------+
| �̰������� �̹�����
������ ó���� �ǰ���~ |
| �翬 ��������Ʈ�� �ִ� �̹�����
���ϴ� ������~ |
+---------------------------------------------------------+
|
+---------------------------------------------------------+
| �������� �����ؾ�
����~ (DDSetColorKey) |
+-------
--------------------------------------------------+
<
�ȷ�Ʈ ���� ��ĵ� >
���? ��ĵ��� ������ ���� ���ô� �е� �����?
(��...)
���ٸ� �̰��¸� �о� �����ʿ� ���ڱ���~ (������~ ^^;)
���̷�Ʈ�� �ȷ�Ʈ ��ü�� �������� ������ �� �ֽ��ϴ�.
������ ����ϸ� �ɱ��? ���ݱ��� ����Ҷ� �����Ҷ���
�
��Ÿ���� �Լ��� �������?
��� CreatePalette��~ �������~���� ������ ���߽ô�
�е� ��ñ���~ ���ٸ� CreatePalette�� ������ �ȷ�Ʈ��
� �Լ��� �̿��ؼ� ���õǾ� �����?
����~ �ٹ� ���߽ô� ����~ SetPalette()�Լ�!
�о� ���� ��Ʈ���� �ȷ�Ʈ ������ �ȷ�Ʈ ��Ʈ����
��
���̷�Ʈ ��ο��� API�� CreatePalette()�Լ��� �̿��ؼ�
�ȷ�Ʈ�� �����ϸ� �˴ϴ�.
�ϴ� �ȷ�Ʈ�� �о� ���϶���
LPDIRECTDRAWPALETTE lpPalette;
.....
.....(��¼�� ��¼��...)
lpPalette = DDLoadPalette(lpDD, "Palette");
//���⼭ "Palette"�� Palette.bmp�� ���մϴ�.
.....
.....(��¼�� ��¼��...)
���ٸ� ���뿡�� CreatePalette() �Լ��� � ���ΰ�?
����ü � ���̱淡? �ñ��Ͻ���~ �ѹ� ���� ����~
=======================================================
HRESULT CreatePalette(
LPDIRECTDRAW
lpDD,
DWORD dwFlags,
LPPALETTEENTRY
lpColorTable,
LPDIRECTDRAWPALETTE
FAR *lplpDDPlaette,
lUnknown FAR
*pUnkOuter )
=======================================================
�Լ� ���� ���� :
lpDD :
DirectDraw ��ü�� ���� ������
dwFlags : �÷� ��Ʈ���� ������
���̷�Ʈ�� �����ϱ�
����
�� ����
lpColorTable : RGB��Ʈ���� ����
������
pUnkOuter : ���� NULL���� ����
DDLoadPalette()�Լ� ���� CreatePalette()�Լ��� dwFlags��
DDPCAPS_8BIT�� 256���� ���� ������ �����մϴ�. ����
16
��Ʈ�� �ϰ��� �Ѵٸ� 8BIT��� 16BIT�� �ֽø� �ǰ���~
�Ϲ������� ���� ������ �ȷ�Ʈ�� �����ϸ�
DDSCL_EXCLUSIVEMODE�÷�ũ�� DDSCK_FULLSCREEN �÷���
����
�Ǿ� �ִٸ� GDI�ȷ�Ʈ ���� �����ϴ�.
������ ���̷�Ʈ �ҽ��� �ִ� �ķ�Ʈ ó���ϴ� �Լ���
�ҽ�
�Դϴ�. ���ڰ� ���� �̺κ��� �ҽ��� �����Ƿ� �ִ� ������
��ü �ϰڽ��ϴ�. ���ô� �е鲲 ���� ��Ź�帳�ϴ�.
//
// DDLoadPalette �Լ�
//
// ��Ʈ���� �ķ�Ʈ�� ���̷�Ʈ ��ο쿡 �����ϴ� �Լ�
//
// ���� �ķ�Ʈ ������ ���ų� NULL�̸� ������ ����Ʈ�� �մϴ�.
// ( 332 palette ? )
//
extern "C" IDirectDrawPalette * DDLoadPalette(IDirectDraw *pdd,
LPCSTR
szBitmap)
{
IDirectDrawPalette* ddpal;
int i;
int n;
int fh;
HRSRC h;
LPBITMAPINFOHEADER lpbi; //
��Ʈ�� ���
PALETTEENTRY ape[256];
// 256 ������ ��������?
RGBQUAD * prgb;
// RGB ��Ʈ��
//
// �ϴ��� ����Ʈ �ķ�Ʈ�� �±��� ����~ ( 332 palette
)
//
for (i=0; i<256; i++)
{
ape[i].peRed = (BYTE)(((i
>> 5) & 0x07) * 255 / 7);
ape[i].peGreen = (BYTE)(((i
>> 2) & 0x07) * 255 / 7);
ape[i].peBlue = (BYTE)(((i
>> 0) & 0x03) * 255 / 3);
ape[i].peFlags = (BYTE)0;
}
//
// ��� ��Ʈ�� ȭ���� �����Ѵٸ� �翬 �о�� ��!
//
if (szBitmap && (h = FindResource(NULL, szBitmap,
RT_BITMAP)))
{
lpbi = (LPBITMAPINFOHEADER)LockResource(LoadResource(NULL,
h));
prgb = (RGBQUAD*)((BYTE*)lpbi
+ lpbi->biSize);
//
�ķ�Ʈ ������ �ľ��ϴ� �κ��� ����~
if (lpbi == NULL || lpbi->biSize
< sizeof(BITMAPINFOHEADER))
n =
0;
else if (lpbi->biBitCount
> 8)
n =
0;
else if (lpbi->biClrUsed
== 0)
n = 1 << lpbi->biBitCount;
else
n =
lpbi->biClrUsed;
//
// ��Ʈ�� Į���� ������
RGB������ �ƴϰ� BGR�̱����̹Ƿ�
//
�ٲ� �־�� �Ѵ�.
//
for(i=0; i<n; i++ )
{
ape[i].peRed
= prgb[i].rgbRed;
ape[i].peGreen
= prgb[i].rgbGreen;
ape[i].peBlue
= prgb[i].rgbBlue;
ape[i].peFlags
= 0;
}
}
else if (szBitmap && (fh = _lopen(szBitmap,
OF_READ)) != -1)
{
BITMAPFILEHEADER bf;
BITMAPINFOHEADER bi;
_lread(fh, &bf, sizeof(bf));
_lread(fh, &bi, sizeof(bi));
_lread(fh, ape, sizeof(ape));
_lclose(fh);
if (bi.biSize != sizeof(BITMAPINFOHEADER))
n =
0;
else if (bi.biBitCount >
8)
n =
0;
else if (bi.biClrUsed == 0)
n =
1 << bi.biBitCount;
else
n =
bi.biClrUsed;
//
// ��Ʈ�� Į���� ������
RGB������ �ƴϰ� BGR�̱����̹Ƿ�
//
�ٲ� �־�� �Ѵ�.
//
for(i=0; i<n; i++ )
{
BYTE
r = ape[i].peRed;
ape[i].peRed
= ape[i].peBlue;
ape[i].peBlue
= r;
}
}
// 256���� �ʱ�ȭ �Ѵ�.
pdd->CreatePalette(DDPCAPS_8BIT, ape, &ddpal,
NULL);
return ddpal;
}
�� Ǯ��ũ���� �������� ����� �ȷ�Ʈ ���� ������
1. ���� ��� (Full Screen Mode)
Ǯ ��ũ��(���� ���)�� ���α������� ������
�ȷ�Ʈ��
RGB�� ù��° ���� ������ ���� �������� �����
������ ��
�� ���� ���� �Ҽ� �ֽ��ϴ�. �� ���⼭ ���� ��������
�dz�
�� ����� �ݵ�� �̻��̿��� �մϴ�.
���� ���� ���� ����� �ٲܼ���
�ֽ��ϴ�. �̷� ���� ���
�� ����ص� ������ � ���� ī�忡���� �̷���
������
�ķ�Ʈ�� ������ ������ �� �ɼ��� �ֽ��ϴ�.
2. �������� ��� (Normal
Screen Mode)
�������� ��忡���� ������ �ȷ�Ʈ�� ���� 10����
���� 10��
�� ���� �̹� ������ �Ǿ��ֽ��ϴ�. ���� ���� ����
���?
(���ٸ� ���α��Ӱ� ������ �̸� �ϸ� �ȵdz�?
^^;)
�̰��� ���������� �ü���� ����ϰ� �ֽ��ϴ�.
�̷���
������ �ƹ��� ȣȭ ������ ���� �ᵵ �̺κ���
����ؼ���
�ȵǹǷ� �������� â�� ���� ������ �ʰ� �÷��̰�
�Ǵ� ��
�Դϴ�. ���� ������� ���� ���� ħ���Ҽ��� ������
�ɼ�
�ִ��� ħ���� ���� �ʴ� ���� ���Ⱑ ���� ����
���?