bmiHeader.set_biBitCount((short)32);
bmiHeader.set_biCompression(WindowsDefs.BI_RGB);
long screenDC = win32.GetDC(0);
PointerPointer valuesPtr = bridge.createPointerPointer(1, false);
long hBMPColorMask =
win32.CreateDIBSection(screenDC, bmi, WindowsDefs.DIB_RGB_COLORS, valuesPtr, null, 0);
// copy rgb-array from BufferedImage to values array
int[] rgb = bufImg.getRGB(0, 0, width, height, null, 0, width);
Int32Pointer values = bridge.createInt32Pointer(valuesPtr.get(0));
values.set(rgb, 0, size);
long hBMPAlphaMask =
win32.CreateDIBSection(screenDC, bmi, WindowsDefs.DIB_RGB_COLORS, valuesPtr, null, 0);
win32.ReleaseDC(0, screenDC);
// set bitmap mask
int[] maskArray = new int[size];
for(int i = 0; i < size; i++) {
if ((rgb[i] & 0xFF000000) != 0) {
maskArray[i] = 0xFFFFFF;
} else {
maskArray[i] = 0;
}
}
values = bridge.createInt32Pointer(valuesPtr.get(0));
values.set(maskArray, 0, size);
// fill icon info
Win32.ICONINFO iconInfo = win32.createICONINFO(false);
iconInfo.set_fIcon(icon ? 1 : 0);