iseahound / ImagePut

A core library for images in AutoHotkey. Supports AutoHotkey v1 and v2.
https://www.autohotkey.com/boards/viewtopic.php?f=83&t=76633
MIT License
116 stars 24 forks source link

Notes: Test out WIC? #44

Closed iseahound closed 1 month ago

iseahound commented 5 months 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)
  }
iseahound commented 5 months ago

Benefits: Might be easier as a "carrier" object. Cons: Not useful for the average AutoHotkey programmer.

Current carriers:

iseahound commented 1 month ago

Not needed