ImagePut
ImagePut copied to clipboard
Notes: Test out WIC?
HBitmapToPngFile(hBitmap, destPngFilePath) {
; from https://www.autohotkey.com/boards/viewtopic.php?p=418815#p418815
static CLSID_WICImagingFactory := "{CACAF262-9370-4615-A13B-9F5539DA4C0A}"
, IID_IWICImagingFactory := "{EC5EC8A9-C395-4314-9C77-54D7A935FF70}"
, GUID_ContainerFormatPng := "{1B7CFAF4-713F-473C-BBCD-6137425FAEAF}"
, WICBitmapUseAlpha := 0x00000000, GENERIC_WRITE := 0x40000000
, WICBitmapEncoderNoCache := 0x00000002
GUID := Buffer(16, 0)
DllCall("Ole32\CLSIDFromString", "WStr", GUID_ContainerFormatPng, "Ptr", GUID)
IWICImagingFactory := ComObject(CLSID_WICImagingFactory, IID_IWICImagingFactory)
ComCall(CreateBitmapFromHBITMAP := 21, IWICImagingFactory, "Ptr", hBitmap, "Ptr", 0, "UInt", WICBitmapUseAlpha, "PtrP", &IWICBitmap := 0)
ComCall(CreateStream := 14, IWICImagingFactory, "PtrP", &IWICStream := 0)
ComCall(InitializeFromFilename := 15, IWICStream, "WStr", destPngFilePath, "UInt", GENERIC_WRITE)
ComCall(CreateEncoder := 8, IWICImagingFactory, "Ptr", GUID, "Ptr", 0, "PtrP", &IWICBitmapEncoder := 0)
ComCall(Initialize := 3, IWICBitmapEncoder, "Ptr", IWICStream, "UInt", WICBitmapEncoderNoCache)
ComCall(CreateNewFrame := 10, IWICBitmapEncoder, "PtrP", &IWICBitmapFrameEncode := 0, "Ptr", 0)
ComCall(Initialize := 3, IWICBitmapFrameEncode, "Ptr", 0)
ComCall(WriteSource := 11, IWICBitmapFrameEncode, "Ptr", IWICBitmap, "Ptr", 0)
ComCall(Commit := 12, IWICBitmapFrameEncode)
ComCall(Commit := 11, IWICBitmapEncoder)
for v in [IWICBitmapFrameEncode, IWICBitmapEncoder, IWICStream, IWICBitmap]
ObjRelease(v)
}
Benefits: Might be easier as a "carrier" object. Cons: Not useful for the average AutoHotkey programmer.
Current carriers:
- dc (Using pARGB)
- pBitmap (Using ARGB, but could this use other formats? Unknown.)
- stream (encoded format)
Not needed