void Win32CompatibleBitmap::Set(Image32 &image)
{
///!!! надо сделать по нормальному, а не через SetPixel !!!
	clear();
	int w = image.width();
	int h = image.height();
	if (w<=0 && h<=0) return;
	
	init(w, h);
	if (!handle) return;
	
	HDC dc = CreateCompatibleDC(0);

	if (!dc) return;

	_w = w;
	_h = h;

	HGDIOBJ old = ::SelectObject(dc, handle);

	int i;
	bool masked = false;
		
	for (int y = 0; y<h; y++) {
		unsigned32 *t = image.line(y);
		char *m = (masked) ? mask.ptr()+y*w : 0;
		for (i=0; i<w; i++) {
			if (t[i] > 0x80000000)
			{
				if (!masked) {
					mask.alloc(w*h);
					memset(mask.ptr(), 1, w*h);
					masked = true;
					m = mask.ptr()+y*w;
				}
				m[i] = 0;
			}
			::SetPixel(dc, i, y, t[i]&0xFFFFFF);
		}
	}

	::SelectObject(dc, old);
	DeleteDC(dc);
}