Closed iseahound closed 1 month ago
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:
Not needed