Slalom Опубликовано 30 июля, 2005 Жалоба Поделиться Опубликовано 30 июля, 2005 Privet vsem.U enya odna problema.Ne moqu ponat kod napisanniy na Win API. Pomoqite mne s etim.Tam dva Voprosa. Fraqment koda: { .................................... maskBitmap = (HBITMAP)LoadImage(NULL, "mask.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); if (!maskBitmap) return NULL; BITMAP bi; BYTE bpp; DWORD TransPixel; DWORD pixel; int startx; INT i, j; HRGN Rgn, ResRgn = CreateRectRgn(0, 0, 0, 0); GetObject(maskBitmap, sizeof( BITMAP ), &bi); bpp = bi.bmBitsPixel >> 3; // Zachem eto nado??? BYTE *pBits = new BYTE[ bi.bmWidth * bi.bmHeight * bpp ]; int p = GetBitmapBits( maskBitmap, bi.bmWidth * bi.bmHeight * bpp, pBits ); TransPixel = *(DWORD*)pBits; TransPixel <<= 32 - bi.bmBitsPixel; //Zachen eto nado??? ............................................................ } Ссылка на комментарий Поделиться на другие сайты Поделиться
mmap Опубликовано 31 июля, 2005 Жалоба Поделиться Опубликовано 31 июля, 2005 bpp = bi.bmBitsPixel >> 3; // Zachem eto nado??? bmBitsPixel: Specifies the number of bits required to indicate the color of a pixel. bi.bmBitsPixel >> 3 означает деление bi.bmBitsPixel на 8 (2 в степени 3). Т.е. если bmBitsPixel содержало 24 (24 бита на пиксел) то получится 3, если 32, то 4 и т.д. Смысл - получение числа байт на пиксел (для корректного выделения памяти в строке BYTE *pBits = new BYTE[ bi.bmWidth * bi.bmHeight * bpp ] TransPixel <<= 32 - bi.bmBitsPixel; //Zachen eto nado??? Тут TransPixel делится на 2 в степени (32 - bi.bmBitsPixel). Для чего это надо сказать не могу не видя всего кода... До этого TransPixel содержит первые 4 байта из массива pBits. Ссылка на комментарий Поделиться на другие сайты Поделиться
Slalom Опубликовано 4 августа, 2005 Автор Жалоба Поделиться Опубликовано 4 августа, 2005 Spasibo za otvet Kolya7k. Vnizu ves kod main.Etot kod sozdaet "Bezbashenniye okna". Mojet bit uvidiv kod ti opredelish dlya 4eqo nujen TransPixel<<=32-bi.bmBitsPixel. Ti skazal 4to delitsya na 2 v stepeni (32 - bi.bmBitsPixel). Mne kajetsya 4to umnojaetsya.No vopros ne v etom. Prosta dlya 4eqo ona nujna. I eshe o TransPixel=*(DWORD)pBits. Ya toje dumayu 4to TransPixel soderjit perviye 4 bayta. No kakiye danniye budut v etix 4 baytax.DWORD eto unsigned long. BYTE eto unsigned char. Jdu otveta ;) ------------------------------------------------------------------------------------- int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // TODO: Place code here. MSG msg; HACCEL hAccelTable; // Initialize global strings LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_MASKWINDOW, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // Perform application initialization: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_MASKWINDOW); //Следующий код вы должны добавить int Style; Style = GetWindowLong(hWnd, GWL_STYLE); Style=Style || WS_CAPTION; Style=Style || WS_SYSMENU; SetWindowLong(hWnd, GWL_STYLE, Style); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); maskBitmap = (HBITMAP)LoadImage(NULL, "mask.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); if (!maskBitmap) return NULL; BITMAP bi; BYTE bpp; DWORD TransPixel; DWORD pixel; int startx; INT i, j; HRGN Rgn, ResRgn = CreateRectRgn(0, 0, 0, 0); GetObject(maskBitmap, sizeof( BITMAP ), &bi); bpp = bi.bmBitsPixel >> 3; //::TextOut(hdc,40,40,bpp,sizeof(bpp)); BYTE *pBits = new BYTE[ bi.bmWidth * bi.bmHeight * bpp ]; int p = GetBitmapBits( maskBitmap, bi.bmWidth * bi.bmHeight * bpp, pBits ); TransPixel = *(DWORD*)pBits; string TransPixel <<= 32 - bi.bmBitsPixel; for (i = 0; i < bi.bmHeight; i++) { startx=-1; for (j = 0; j < bi.bmWidth; j++) { pixel = *(DWORD*)(pBits + (i * bi.bmWidth + j) * bpp) << (32 - bi.bmBitsPixel); if (pixel != TransPixel) { if (startx<0) { startx = j; } else if (j == (bi.bmWidth - 1)) { Rgn = CreateRectRgn( startx, i, j, i + 1 ); CombineRgn( ResRgn, ResRgn, Rgn, RGN_OR); startx=-1; } } else if (startx>=0) { Rgn = CreateRectRgn(startx, i, j, i + 1); CombineRgn(ResRgn, ResRgn, Rgn, RGN_OR); startx=-1; } } } delete pBits; SetWindowRgn(hWnd, ResRgn, TRUE); InvalidateRect(hWnd, 0, false); //Конец добавляемого кода // Main message loop: while (GetMessage(&msg, NULL, 0, false)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam; } --------------------------------------------------------------------------------------- Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти