remove stb, commit to new jpeg

This commit is contained in:
Ryan Oldenburg 2022-05-16 22:44:33 -05:00
parent 3e204e829f
commit 4194c4a677
6 changed files with 8 additions and 7973 deletions

View file

@ -1,5 +1,5 @@
import bumpy, chroma, flatty/binny, os, pixie/common, pixie/contexts, import bumpy, chroma, flatty/binny, os, pixie/common, pixie/contexts,
pixie/fileformats/bmp, pixie/fileformats/gif, pixie/fileformats/jpg, pixie/fileformats/bmp, pixie/fileformats/gif, pixie/fileformats/jpeg,
pixie/fileformats/png, pixie/fileformats/ppm, pixie/fileformats/qoi, pixie/fileformats/png, pixie/fileformats/ppm, pixie/fileformats/qoi,
pixie/fileformats/svg, pixie/fonts, pixie/images, pixie/masks, pixie/paints, pixie/fileformats/svg, pixie/fonts, pixie/images, pixie/masks, pixie/paints,
pixie/paths, strutils, vmath pixie/paths, strutils, vmath
@ -8,7 +8,7 @@ export bumpy, chroma, common, contexts, fonts, images, masks, paints, paths, vma
type type
FileFormat* = enum FileFormat* = enum
PngFormat, BmpFormat, JpgFormat, GifFormat, QoiFormat, PpmFormat PngFormat, BmpFormat, JpegFormat, GifFormat, QoiFormat, PpmFormat
converter autoStraightAlpha*(c: ColorRGBX): ColorRGBA {.inline, raises: [].} = converter autoStraightAlpha*(c: ColorRGBX): ColorRGBA {.inline, raises: [].} =
## Convert a premultiplied alpha RGBA to a straight alpha RGBA. ## Convert a premultiplied alpha RGBA to a straight alpha RGBA.
@ -22,8 +22,8 @@ proc decodeImage*(data: string): Image {.raises: [PixieError].} =
## Loads an image from memory. ## Loads an image from memory.
if data.len > 8 and data.readUint64(0) == cast[uint64](pngSignature): if data.len > 8 and data.readUint64(0) == cast[uint64](pngSignature):
decodePng(data) decodePng(data)
elif data.len > 2 and data.readUint16(0) == cast[uint16](jpgStartOfImage): elif data.len > 2 and data.readUint16(0) == cast[uint16](jpegStartOfImage):
decodeJpg(data) decodeJpeg(data)
elif data.len > 2 and data.readStr(0, 2) == bmpSignature: elif data.len > 2 and data.readStr(0, 2) == bmpSignature:
decodeBmp(data) decodeBmp(data)
elif data.len > 5 and elif data.len > 5 and
@ -64,7 +64,7 @@ proc encodeImage*(image: Image, fileFormat: FileFormat): string {.raises: [Pixie
case fileFormat: case fileFormat:
of PngFormat: of PngFormat:
image.encodePng() image.encodePng()
of JpgFormat: of JpegFormat:
raise newException(PixieError, "Unsupported file format") raise newException(PixieError, "Unsupported file format")
of BmpFormat: of BmpFormat:
image.encodeBmp() image.encodeBmp()
@ -88,7 +88,7 @@ proc writeFile*(image: Image, filePath: string) {.raises: [PixieError].} =
let fileFormat = case splitFile(filePath).ext.toLowerAscii(): let fileFormat = case splitFile(filePath).ext.toLowerAscii():
of ".png": PngFormat of ".png": PngFormat
of ".bmp": BmpFormat of ".bmp": BmpFormat
of ".jpg", ".jpeg": JpgFormat of ".jpg", ".jpeg": JpegFormat
of ".qoi": QoiFormat of ".qoi": QoiFormat
of ".ppm": PpmFormat of ".ppm": PpmFormat
else: else:
@ -104,7 +104,7 @@ proc writeFile*(mask: Mask, filePath: string) {.raises: [PixieError].} =
let fileFormat = case splitFile(filePath).ext.toLowerAscii(): let fileFormat = case splitFile(filePath).ext.toLowerAscii():
of ".png": PngFormat of ".png": PngFormat
of ".bmp": BmpFormat of ".bmp": BmpFormat
of ".jpg", ".jpeg": JpgFormat of ".jpg", ".jpeg": JpegFormat
of ".qoi": QoiFormat of ".qoi": QoiFormat
of ".ppm": PpmFormat of ".ppm": PpmFormat
else: else:

View file

@ -21,7 +21,7 @@ import pixie/common, pixie/images, pixie/masks, sequtils, strutils, chroma, std/
const const
fastBits = 9 fastBits = 9
jpgStartOfImage* = [0xFF.uint8, 0xD8] jpegStartOfImage* = [0xFF.uint8, 0xD8]
deZigZag = [ deZigZag = [
uint8 00, 01, 08, 16, 09, 02, 03, 10, uint8 00, 01, 08, 16, 09, 02, 03, 10,
uint8 17, 24, 32, 25, 18, 11, 04, 05, uint8 17, 24, 32, 25, 18, 11, 04, 05,

View file

@ -1,22 +0,0 @@
import pixie/common, pixie/images
const
jpgStartOfImage* = [0xFF.uint8, 0xD8]
when defined(pixieUseStb):
import pixie/fileformats/stb_image/stb_image
else:
import pixie/fileformats/jpeg
proc decodeJpg*(data: string): Image {.inline, raises: [PixieError].} =
## Decodes the JPEG into an Image.
when not defined(pixieUseStb):
decodeJpeg(data)
else:
var
width: int
height: int
let pixels = loadFromMemory(data, width, height)
result = newImage(width, height)
copyMem(result.data[0].addr, pixels[0].unsafeAddr, pixels.len)

View file

@ -1,6 +0,0 @@
#define STBI_NO_STDIO
#define STBI_NO_LINEAR
#define STBI_NO_HDR
#define STBI_ONLY_JPEG
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

File diff suppressed because it is too large Load diff

View file

@ -1,40 +0,0 @@
import pixie/common
when defined(windows) and defined(vcc):
{.pragma: stbcall, stdcall.}
else:
{.pragma: stbcall, cdecl.}
{.compile: "stb_image.c".}
proc stbi_image_free(retval_from_stbi_load: pointer)
{.importc: "stbi_image_free", stbcall.}
proc stbi_load_from_memory(
buffer: pointer,
len: cint,
x, y, channels_in_file: var cint,
desired_channels: cint
): pointer
{.importc: "stbi_load_from_memory", stbcall.}
proc loadFromMemory*(buffer: string, width, height: var int): string =
var outWidth, outHeight, outComponents: cint
let data = stbi_load_from_memory(
buffer[0].unsafeAddr,
buffer.len.cint,
outWidth,
outHeight,
outComponents,
4
)
if data == nil:
raise newException(PixieError, "Decoding JPG failed")
width = outWidth.int
height = outHeight.int
result.setLen(width * height * 4)
copyMem(result[0].addr, data, result.len)
stbi_image_free(data)