Go to the previous, next section.

DIB procedures

The following procedures have typed parameters, using the same convention as windows-procedure.

procedure+: open-dib (filename string)

Return type: dib. Calls the OpenDIB entry of `DIBUTILS.DLL'. If the return value is not #f then the file filename was found, successfully opened, and the contents were suitable for loading into memory as a device independent bitmap.

procedure+: write-dib (filename string) (dib dib)

Return type: bool. Calls the WriteDIB entry of `DIBUTILS.DLL'. Returns #t if the file filename could be opened and written to. After this operation the file contains the bitmap data in a standard format that is understood by open-dib and various system utilities like the bitmap editor. Any problems resulting in failure are signalled by a #f return value.

procedure+: bitmap-from-dib (dib dib) (palette hpalette)

Return type: hbitmap. Calls the BitmapFromDib entry of `DIBUTILS.DLL'. The returned value is a device dependent bitmap. The colours from the DIB are matched against colors in palette.

procedure+: dib-from-bitmap (bitmap hbitmap) (style dword) (bits word) (palette hpalette)

Return type: dib. Returns a DIB containing the same image as the device dependent bitmap bitmap. Style determines the kind of DIB, e.g. compression style. Calls the DibFromBitmap entry of `DIBUTILS.DLL'.

procedure+: dib-blt (dest hdc) (x int) (y int) (w int) (h int) (src dib) (src-x int) (src-y int) (raster-op long)

Return type: bool. Calls the DibBlt entry of `DIBUTILS.DLL'. Similar to the Win32 API BitBlt call, but draws a DIB rather than a piece of another device context. Draws the dib on device context hdc at position (x,y). A rectangle of width w and height h is copied from position (src-x,src-y) of dib. Raster-op is supposed to allow the source and destination to be combined but I don't think I got this right so stick to SRCCOPY.

procedure+: %delete-dib (dib-handle handle)

Return type: bool. Calls the DeleteDIB entry of `DIBUTILS.DLL'. Note that the parameter is a handle, and not a dib. This allows us to destroy a DIB and reclaim its memory by knowing only the handle value, and not needing the dib record. The importance of this is that if the dib record is GC-ed then a GC hook can reclaim the storage knowing only the handle.

procedure+: delete-dib (dib dib)

Return type: bool. This procedure calls %delete-dib to reclaim the storage occupied by a DIB. After being deleted, the DIB should not be used. This procedure allows the programmer to reclaim external heap storage rather than risking it running out before the next garbage collection.

procedure+: dib-height (dib dib)

Return type: int. Calls the DibHeight expand entry of `DIBUTILS.DLL', which returns the height of the bitmap in pixels.

procedure+: dib-width (dib dib)

Return type: int. Calls the DibWidth entry of `DIBUTILS.DLL', which returns the width of the bitmap in pixels.

procedure+: copy-bitmap (bm hbitmap)

Return type: hbitmap. Calls the CopyBitmap of `DIBUTILS.DLL', which creates a new bitmap with the same size and contents as the original.

procedure+: create-dib (width int) (height int) (style int) (depth int) (palette hpalette)

Return type: dib. Calls the CreateDIB entry of `DIBUTILS.DLL'. Creates a DIB of width by height pixels and depth bits of colour information. The style parameter determines how the bitmap is stored. I have only ever used BI_RGB. If depth<=8 then the palette determines the DIB's colour table.

procedure+: crop-bitmap (bm hbitmap) (left int) (top int) (right int) (bottom int)

Return type: hbitmap. Calls the CropBitmap entry of `DIBUTILS.DLL'. Returns a new bitmap containing the image from a region of the original.

procedure+: dib-set-pixels-unaligned dib (pixels string)

Return type: bool. Calls the DIBSetPixelsUnaligned entry of `DIBUTILS.DLL'. Stuffs bytes from pixels into the bitmap. There are no alignment constraints on pixels (the usual way of doing this is to use the SetDIBits function which requires that every scan line of the bitmap is 32-bit word aligned, even if the scan lines are not a multiple of 4 bytes long). doing this

Go to the previous, next section.