Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Ne moqu ponat kod


Рекомендуемые сообщения

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???

............................................................

}

Ссылка на комментарий
Поделиться на другие сайты

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 ]:bye1:

TransPixel <<= 32 - bi.bmBitsPixel; //Zachen eto nado???

Тут TransPixel делится на 2 в степени (32 - bi.bmBitsPixel).

Для чего это надо сказать не могу не видя всего кода...

До этого TransPixel содержит первые 4 байта из массива pBits.

Ссылка на комментарий
Поделиться на другие сайты

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;

}

---------------------------------------------------------------------------------------

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...