Added extra error checking when the bitmap was invalid

This commit is contained in:
nathan 2018-08-18 16:45:47 +02:00
parent 7178e04230
commit f1c4068194

View File

@ -24,6 +24,9 @@ import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import org.slf4j.LoggerFactory;
import com.sun.jna.Memory;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.WinGDI;
import com.sun.jna.ptr.PointerByReference;
@ -53,10 +56,16 @@ public class HBITMAPWrap extends HBITMAP {
bmi.bmiHeader.biCompression = WinGDI.BI_RGB;
bmi.bmiHeader.biSizeImage = w * h * 4;
PointerByReference ppbits = new PointerByReference();
hBitmap = GDI32.CreateDIBSection(memDC, bmi, WinGDI.DIB_RGB_COLORS, ppbits, null, 0);
Pointer pbits = ppbits.getValue();
Memory memory = new Memory(w*h*32*4);
PointerByReference pointerRef = new PointerByReference(memory);
hBitmap = GDI32.CreateDIBSection(memDC, bmi, WinGDI.DIB_RGB_COLORS, pointerRef, null, 0);
Pointer pointerToBits = pointerRef.getValue();
if (pointerToBits == null) {
// the bitmap was invalid
LoggerFactory.getLogger(HBITMAPWrap.class).error("The image was invalid", Kernel32.getLastErrorMessage());
}
else {
Raster raster = buf.getData();
int[] pixel = new int[4];
int[] bits = new int[w * h];
@ -70,7 +79,9 @@ public class HBITMAPWrap extends HBITMAP {
bits[x + y * w] = alpha | red | green | blue;
}
}
pbits.write(0, bits, 0, bits.length);
pointerToBits.write(0, bits, 0, bits.length);
}
return hBitmap;
} finally {
User32.ReleaseDC(null, screenDC);
@ -81,7 +92,8 @@ public class HBITMAPWrap extends HBITMAP {
BufferedImage img;
public HBITMAPWrap(BufferedImage img) {
setPointer(createBitmap(img).getPointer());
HBITMAP bitmap = createBitmap(img);
setPointer(bitmap.getPointer());
this.img = img;
}