DIB procedures - MIT/GNU Scheme 7.7.90+
Description: MIT/GNU Scheme 7.7.90+

Next: Other parts of the DIB Utilities implementation, Previous: Device Independent Bitmap Utilities, Up: Device Independent Bitmap Utilities

#### 18.3.1 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 dib)

> Return type: bool. This procedure reclaims 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