��λͼ
������bmp_two
��
������λͼ������Ч���ܼ���������Ҫ��ʾ��Ч���IJ�ɫͼ���⣬��Ҫ�õ����ĺڰ�ɫ����ͼ��
����������Ҫ��ȷ��ʾ���ǵ�����Ч������������һ����ɫ��ͼ�������Ҫ��ʾΪ���ĵط�Ҫ���Ǻ�ɫ�ģ���Σ���ͼ������Ҫ��ʾΪ��Ч���ĵط�Ҫ���ǰģ����������ĵط����Ǻ�ɫ�ģ���ɫͼ���������ͼ����ͼ�е��������ʾ��
BitBlt����
����������ô��������Ч���ģ��������ǽ�BitBlt()�����һ��������ΪSRCAND����ʾ��ͼ��Ȼ���ٰ�����ΪSRCPAINT��BitBlt()����ʾ��ͼ.�������������Ҫ���ĵط����]�иı�������ĵط���ͨ��һ����ʾ.
SelectObject(hdcMem, g_hbmMask);
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCAND);
SelectObject(hdcMem, g_hbmBall);
BitBlt(hdc, 0, bm.bmHeight, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCPAINT);
�����൱��?�е����ˣ������и�����...��ͼ��������?��������������������ȡ��ͼ...
�������㴴����ͼ�Ļ�ͼ�������Լ�����������ʹ�õò���Ļ�������Ҳ�Ǻ�����.�����Ļ���Ͱ��㴴������ͼ������Դ����LoadBitmap()��װ����.
������������е�ʱ��������������ԭ����ͼƬ�е�һ���ɫѡΪ''��''ɫ������һ�������ɫ���ڵĵط�Ϊ��ɫ�ģ������ĵط���Ϊ��ɫ��ͼƬ.
������Ϊ��һ�ַ����]��ʲô����˵�ģ������Ը��Ļ��Ϳ��Ԓ�ȡ���ַ���.�ڶ���ǣ��һЩBitBlt()�ļ��ɣ�����������ʾһ�����ַ���.
������ͼ
������ķ��������DZ�����ͼ�е�ÿ�����أ��������ֵ������Ӧ��������Ϊ��ͼ�еĺڻ��...����SetPixel()��ͼ����������������Ҳ�Dz�̫ʵ��.
������BitBlt()���Ѳ�ͼתΪ�ڰ�ɫ����Ч�ʵö�.�������BitBlt()����SRCCOPY�����ѱ�����һ����ͼ��HDCд��һ��������һ���ڰ�ͼƬ��HDC�����ͻ����ͼ����Ϊ����ɫ���ɫ�����������ɫ�����ض���Ϊ�ף��κβ��DZ���ɫ���������ض�����Ϊ��ɫ.
�������������˵�Ǹ��ܺõĹ��ܣ���Ϊ������Ҫ���ľ��ǰ����Dz�ͼ��Ҫ��Ч�����ɫָ��Ϊ����ɫ�����Ѳ�ͼ��BitBlt()�Ӳ�ͼ������ͼ������.ע����ֻ�ܶԵ�ɫ����ͼ��Ч���ںͰף�...����˵ÿ�����ص��ɫ���Ϊ1��bit��λͼ.������һ��ֻ�кڰ����صIJ�ͼ��������������λͼ����ȴ���1
��bit(����16����24bit)�Ͳ���.
������ס���������Ҫ�ɹ�����Ҫ�����]��?��������Ҫ��Ч���ĵط���Ҫ�Ǻ�ɫ��.��Ϊ�������ڴ�����λͼ�Ѿ�������������ˣ�����Ҫ������ô�����ˣ���������������Ĵ�����������һ��λͼ��ʹһ����ͬ���ɫΪ��Ч����һ���Ƿۺ�ɫ�������Ǿ�Ҫ���еڶ����IJ��������������Ǹոմ�������ͼ����ԭͼ��һ�㣬��ʹ����Ҫ��Ч���ĵط���Ϊ��ɫ.�e��ʲô�ط�Ҳ�Ǻ�ɫҲ��Ҫ������Ϊ��ͼ�����Dz��ǰ�ɫ�ģ����ǾͲ���Ϊ����.���ǿ�����BitBlt()����SRCINVERT���������µ���ͼд��ԭ��ͼ����������ͼ��Ϊ��ɫ�ĵط���Ϊ��ɫ.
������������е㸴�ӣ����Ծ���һ��С������Ϊ����������������������:
HBITMAP CreateBitmapMask(HBITMAP hbmColour, COLORREF crTransparent)
{
HDC hdcMem, hdcMem2;
HBITMAP hbmMask;
BITMAP bm;
// Create monochrome (1 bit) mask bitmap.
GetObject(hbmColour, sizeof(BITMAP), &bm);
hbmMask = CreateBitmap(bm.bmWidth, bm.bmHeight, 1, 1, NULL);
// Get some HDCs that are compatible with the display driver
hdcMem = CreateCompatibleDC(0);
hdcMem2 = CreateCompatibleDC(0);
SelectBitmap(hdcMem, hbmColour);
SelectBitmap(hdcMem2, hbmMask);
// Set the background colour of the colour image to the colour
// you want to be transparent.
SetBkColor(hdcMem, crTransparent);
// Copy the bits from the colour image to the B+W mask... everything
// with the background colour ends up white while everythig else ends up
// black...Just what we wanted.
BitBlt(hdcMem2, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
// Take our new mask and use it to turn the transparent colour in our
// original colour image to black so the transparency effect will
// work right.
BitBlt(hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem2, 0, 0, SRCINVERT);
// Clean up.
DeleteDC(hdcMem);
DeleteDC(hdcMem2);
return hbmMask;
}
ע�⣺�����������SelectObject()����ʱ�ذ����Ǵ���һ��HDC��λͼѡ�룮һ��λͼ����ͬʱ��ѡ����HDC������Ҫȷ�����λͼ����������������ʱ��]�б�ѡ������һ��HDC������ͻ����.������������ɰ���С���������Ǿ�װ��һ��ԭͼ��ʱ�������ϾͿ��Դ���һ����ͼ�ˣ�
case WM_CREATE:
g_hbmBall = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BALL));
if(g_hbmBall == NULL)
MessageBox(hwnd, "Could not load IDB_BALL!", "Error", MB_OK | MB_ICONEXCLAMATION);
g_hbmMask = CreateBitmapMask(g_hbmBall, RGB(0, 0, 0));
if(g_hbmMask == NULL)
MessageBox(hwnd, "Could not create mask!", "Error", MB_OK | MB_ICONEXCLAMATION);
break;
�����ڶ���������Ȼ������Ҫ��ԭͼ����ʾΪ��Ч�����ɫ������ط�Ϊ��ɫ.
��Щ����ô�����İ�?
����...����ܻ�����仰������������ô�õ�C����C++����Ļ�����Ӧ����Ϥ��Щ�����ƵIJ�����OR��XOR��AND��NOT�ȵ�.�Ҳ�������ȫ������Щ������������Ҫ˵˵����������������������ǵ�.����ҵĽ��Ͳ������(�������������)��ȥ��ϰһ�¶����Ʋ�����֪ʶ���ܾ�������.���ⲻ������ʹ�����ǵı�Ҫ���������������ȫ����������Ҳ�����Թ�������һ��.
SRCAND
����BitBlt()��SRCAND��Ų������ΪROP������ζ����AND�����λ.����˵:ֻ��Դ��Ŀ�ĵ�λ����1�����Ϊ1.��������������������ǵIJ�ͼ�е���Щ���ɫ��������ͼ�ж���Ϊ��ɫ.����Ҫ�ɫ�ĵط�����ͼ�ж��Ǻ�ɫ(�ڶ������϶�Ϊ0)��Ȼ����ͼ�����е�Ϊ��ɫ�������ڽ���б���Ϊ0������Ҳ�Ǻ�ɫ.������AND��1������ֵ��������Ӱ�죬���ԭ����1�͵ó�1��ԭ����0�͵ó�0
...�������ǵ���ͼ��Ϊ��ɫ�IJ�����BitBlt()����֮����ȫ�]�б�Ӱ��.
�����������ͼƬ�е����Ͻǵ��Ǹ�ͼ��
SRCPAINT
����SRCPAINT���õ�OR�����������������֮һ�����߶�Ϊ1��������Ϊ1. ���ǶԲ�ͼ�����������.
�����ǵIJ�ͼ�ĺ�ɫ����(������)��OR����Ŀ��������ϣ�������Ǜ]��Ӱ�죬��Ϊ�κ�ֵ��0����OR������������Ӱ�죮
�������ǣ����Dz�ͼ���������ֲ��Ǻ�ɫ�ģ����Ŀ������Ҳ���Ǻ�ɫ�ģ����Ǿ͵õ�Դ��Ŀ��ɫ�ʵĻ�ϣ����������������ͼƬ�ڶ��еĵڶ�����.�������������Ҫ����ͼ������Ҫ��Ϊ��ɫ�ĵط���Ϊ��ɫ��ȫ�����ɣ�����������OR��������ͼʱ����ɫ�����ز�����κ����������ػ�ϣ�
SRCINVERT
������������������Դ��ͼ�е�Ҫ��Ч���ĵط���Ϊ��ɫ��XOR����(������Ǻ�ɫ�Ļ�).����ͼ�еĺ�������Ŀ��������϶�Ŀ�����ز������κ�Ӱ�죬������ͼ�еİ�ɫ���أ�������һ���ض��ı���ɫ�����ɵģ��뱳��ɫ����������Ͼͻ����ȡ������������Ϊ��ɫ��
���������һ����ڲ�ͼ�뵥ɫ�IJ�����Ϸ�����ҵ�ͷ��ö��е�ʹ�ˣ�������ô˵��������������ģ�����˵��ģ�
����
������������ϵ�bmp_two�����е�������������˿��Ի�����¿�ʼ������ͼƬ�ij���������SRCCOPY��������ͼ��ԭ��ͼԭ�����������ٷքe��SRCAND��SRCPAINT������ͼƬ�������������Ǻϳ����ս����
�����������аѱ���ɫ��Ϊ��ɫ��ʹ��Ч�������ԣ�Ҫ���ð�ɫ���Ǻ�ɫ������ɫ�Ļ��ͺ��ѿ������Ƿ��������Ч����
|