Flippy is a simple 2d image and drawing library.
See api reference: https://treeform.github.io/flippy/
Basic ussage:
# load an image
var image = loadImage("tests/lenna.png")
# print it out
echo image
# get a color pixel
echo image.getRgba(100, 100)
# put a color pixel
image.putRgba(10, 10, rgba(255, 0, 0, 255))
# blit a rectangular part from one place to another
blit(image, image, rect(0, 0, 100, 100), rect(100, 100, 100, 100))
# draw a line
image.line(vec2(11, 11), vec2(100, 100), rgba(0, 0, 0, 255))
# minify image by 2 or 1/2 or scale by 50%
image = image.minify(2)
# save the image to a file
image.save("tests/lenna2.png")Into
import flippyMain image object that holds the bitmap data.
Image = ref object
filePath*: string
width*: int
height*: int
channels*: int
format*: int
data*: seq[uint8]
Display the image path, size and channels.
proc `$`(image: Image): stringCreates a new image with appropriate dimensions.
proc newImage(width, height, channels: int): ImageCreates a new image with a path.
proc newImage(filePath: string; width, height, channels: int): ImageLoads a png image.
proc loadImage(filePath: string): Image {.raises: [STBIException].}Saves a png image.
proc save(image: Image) {.raises: [Exception].}Sets image path and save the image.
proc save(image: Image; filePath: string) {.raises: [Exception].}Returns true if x,y is inside the image.
proc inside(image: Image; x, y: int): bool {.inline.}Gets a color from (x, y) coordinates.
proc getRgba(image: Image; x, y: int): ColorRGBA {.inline.}Gets a pixel as (x, y) floats.
proc getRgba(image: Image; x, y: float64): ColorRGBA {.inline.}Gets a pixel as (x, y) but returns transparency if next sampled outside.
proc getRgbaSafe(image: Image; x, y: int): ColorRGBA {.inline.}Puts a ColorRGBA pixel back.
proc putRgba(image: Image; x, y: int; rgba: ColorRGBA) {.inline.}Puts a ColorRGBA pixel back as x, y floats (does not do blending).
proc putRgba(image: Image; x, y: float64; rgba: ColorRGBA) {.inline.}Puts pixel onto the image or safely ignores this command if pixel is outside the image.
proc putRgbaSafe(image: Image; x, y: int; rgba: ColorRGBA) {.inline.}Blits rectangle from one image to the other image.
proc blit(destImage: Image; srcImage: Image; pos: Vec2)Blits rectangle from one image to the other image.
proc blit(destImage: Image; srcImage: Image; src, dest: Rect)Blits rectangle from one image to the other image with masking color.
proc blitWithMask(destImage: Image; srcImage: Image; src, dest: Rect; rgba: ColorRGBA)Blits one image onto another using matrix with alpha blending.
proc blit(destImage: Image; srcImage: Image; mat: Mat4)Blits one image onto another using matrix with alpha blending.
proc blitWithAlpha(destImage: Image; srcImage: Image; mat: Mat4)Blits one image onto another using matrix with masking color.
proc blitWithMask(destImage: Image; srcImage: Image; mat: Mat4; rgba: ColorRGBA)Draws a line from one at vec to to vec.
proc line(image: Image; at, to: Vec2; rgba: ColorRGBA)Draws a filled rectangle.
proc fillRect(image: Image; rect: Rect; rgba: ColorRGBA)Draws a rectangle borders only.
proc strokeRect(image: var Image; rect: Rect; rgba: ColorRGBA)Draws a filled circle with antilaised edges.
proc fillCirle(image: Image; pos: Vec2; radius: float; rgba: ColorRGBA)Draws a border of circle with antilaised edges.
proc strokeCirle(image: Image; pos: Vec2; radius: float; border: float; rgba: ColorRGBA)Scales the image down by an integer scale.
proc minifyBy2(image: Image): ImageScales the image down by an integer scale.
proc minify(image: Image; scale: int): ImageScales image image up by an integer scale.
proc magnify(image: Image; scale: int): ImageFills the image with a solid color.
proc fill(image: Image; rgba: ColorRGBA) {.raises: [Exception].}Flips the image around the Y axis
proc flipHorizontal(image: Image): ImageFlips the image around the X axis
proc flipVertical(image: Image): ImageShears image horizontally.
proc shearX(image: Image, shear: float): ImageShears image vertically.
proc shearY(image: Image, shear: float): ImageRotates image by theta (in degrees).
proc rotate(image: Image, theta: float): ImageRotates the image clockwise
proc rotate90Degrees(image: Image): ImageRotates the image anti-clockwise
proc rotateNeg90Degrees(image: Image): ImageGets a sub image of the main image
proc getSubImage(image: Image; x, y, w, h: int): ImageRemoves alpha channel from the images by: Setting it to 255 everywhere.
proc removeAlpha(image: Image)PNG saves space by encoding alpha = 0 areas as black. but scaling such images lets the black or gray come out. This bleeds the real colors into invisible space
proc alphaBleed(image: Image)