diff --git a/NeoBitmapFile-object-API.md b/NeoBitmapFile-object-API.md new file mode 100644 index 0000000..0bad595 --- /dev/null +++ b/NeoBitmapFile-object-API.md @@ -0,0 +1,68 @@ +NeoBitmapFile represents a image container object that retrieves pixels from a bmp file. The primary use of this class is to contain reference an image from a file and have it rendered to a NeoPixelBus. + +## Constructors + +### NeoBitmapFile\\() +This will define the object with the given Method and File types. +Valid classes for FEATURE are the same as NeoPixelBus and you find them [here](https://github.com/Makuna/NeoPixelBus/wiki/NeoPixelBus-object#neo-features). +Valid classes for FILE are any class that exposes the same API as the `File` class. It does not require that it be the `SDFile`. + +``` +NeoBitmapFile image; + +``` + +## Methods +### bool Begin(FILED file) +This will initialize the NeoBitmapFile to use the given file. It will check the contents of the file for a valid image and configure itself to read data from the file. +It will return false if the file is not a compatible file format. Currently it requires the file to be BMP, 24 or 32 bit, with no compression. + +### uint16_t PixelSize() const +This will return the number of bytes a single pixel takes. + +### uint16_t PixelCount() const +This will return the number of pixels in the file. + +### uint16_t Width() const +This will return the width in pixels of the file. + +### uint16_t Height() const +This will return the height in pixels of the file. + +### ColorObject GetPixelColor(int16_t x, int16_t y) +This will return the color of the given pixel. + x - the horizontal pixel position + y - the vertical pixel position + \, a color object, RgbColor or RgbwColor. + +### void Blt(NeoBufferContext destBuffer, uint16_t indexPixel, int16_t xSrc, int16_t ySrc, int16_t wSrc) +This will render this image to the destBuffer at indexPixel. This is a linear rendering, not a 2D image rendering. + destBuffer - Another NeoBuffer or NeoPixelBus. + indexPixel - the location to start the render at + xSrc - the horizontal location in the bitmap to render from + ySrc - the vertical location in the bitmap to render from + wSrc - the number of pixels to render + +### void Blt(NeoBufferContext destBuffer, int16_t xDest, int16_t yDest, int16_t xSrc, int16_t ySrc, int16_t wSrc, int16_t hSrc, LayoutMapCallback layoutMap) +This will render part of this image to the destBuffer at given location. This is a 2d image rendering. + destBuffer - Another NeoBuffer or NeoPixelBus. + xDest - the upper left location in the destination to render to + yDest - the upper left location in the destination to render to + xSrc - the upper left location in the source to render from + ySrc - the upper left location in the source to render from + wSrc - the width to render + hSrc - the height to render + layoutMap - a layoutMap callback that implements the destinations mapping routine (see below) + +## Callbacks +### uint16_t LayoutMapCallback(int16_t x, int16_t y) +As the consumer of certain methods, you will need to implement this and pass it into those methods. You are expected to translate the x,y location of the destination to a linear index value. If you have implemented `NeoTopology`, `NeoTiles`, or `NeoMosaic`; you can just call the `MapProbe()` method on them and return what they provide. +``` +NeoTopology topo(16,16); // 16x16 matrix panel + +uint16_t MyLayoutMap(int16_t x, int16_t y) +{ + return topo.MapProbe(x, y); +} +``` +If you implement your own, make sure to handle out of range values beyond your edges including negative values and return `PixelIndex_OutOfBounds` for these cases. \ No newline at end of file