Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.04;
Скачать: CL | DM;

Вниз

Скин для формы   Найти похожие ветки 

 
Sergey_n ©   (2002-01-19 02:20) [2]

На Pascal пример не нашел, но нашел на C++, надеюсь разберешся:
Это очень простая функция, создающая регион из bitmap (.bmp) файла. Так же в примере представлен усовершенствованный вариант этой функции, позволяющий задавать маску изображения.

Компилятор: Visual C++ 4-6

Функция называется CreateRgn и имеет два параметра:
szFileName - имя файла, содержащего картинку.
pPoint - указатель на структуру POINT , которая содержит координаты цвета, который используется для конструирования региона, если параметр NULL, то будет использоваться цвет в координате (0, 0).

HRGN CreateRgn(LPTSTR szFileName, LPPOINT pPoint)
{
HBITMAP hBmp = (HBITMAP)LoadImage( NULL, szFileName,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
if ( !hBmp ) return NULL;

BITMAP bi;
BYTE bpp;
DWORD e;
DWORD f, t;
INT i, j;
bool b = false;
HRGN Rgn, ResRgn = CreateRectRgn( 0, 0, 0, 0 );

GetObject( hBmp, sizeof( BITMAP ), &bi );

bpp = bi.bmBitsPixel >> 3;

BYTE *pBits = new BYTE[ bi.bmWidth * bi.bmHeight * bpp ];

int p = GetBitmapBits( hBmp, bi.bmWidth * bi.bmHeight * bpp,
pBits );

if ( pPoint == NULL || pPoint->x >= bi.bmWidth ||
pPoint->y >= bi.bmHeight )
e = *(DWORD*)pBits;
else
e = *(DWORD*)(pBits + (pPoint->y * bi.bmWidth + pPoint->x) * bpp );

e <<= 32 - bi.bmBitsPixel;

for ( i = 0; i < bi.bmHeight; i++ )
for ( j = 0; j < bi.bmWidth; j++ )
{
t = *(DWORD*)(pBits + (i * bi.bmWidth +
j) * bpp) << (32 - bi.bmBitsPixel);

if ( t == e )
{
if ( !b )
{
f = j;
b = true;
} else if ( j == (bi.bmWidth - 1) )
{
Rgn = CreateRectRgn( f, i, j, i + 1 );
CombineRgn( ResRgn, ResRgn, Rgn, RGN_OR );
b = false;
}
} else if ( b )
{
Rgn = CreateRectRgn( f, i, j, i + 1 );
CombineRgn( ResRgn, ResRgn, Rgn, RGN_OR );
b = false;
}
}

delete pBits;

return ResRgn;
}



Страницы: 1 вся ветка

Текущий архив: 2002.02.04;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.01 c
4-9040
GoldenFox
2001-12-06 16:06
2002.02.04
Надо убрать иконку из Таскбара в WinNT,


1-8865
ctapik-net
2002-01-21 15:40
2002.02.04
Создание электронного письма через ShellExecute


4-9043
sandman
2001-11-20 14:42
2002.02.04
Вывод bitmap из ресурса


7-9018
Spiritbad
2001-10-25 12:47
2002.02.04
Про порты.


4-9035
Art
2001-12-08 09:01
2002.02.04
Прочитайте вопрос!!!