93 lines
2.3 KiB
Markdown
93 lines
2.3 KiB
Markdown
# zstbi v0.10.0 - stb image bindings
|
|
|
|
## Features
|
|
|
|
* Supports Zig memory allocators
|
|
* Supports decoding most popular formats
|
|
* Supports HDR images
|
|
* Supports 8-bits and 16-bits per channel
|
|
* Supports image resizing
|
|
* Supports image writing (.png, .jpg)
|
|
|
|
## Getting started
|
|
|
|
Copy `zstbi` to a subdirectory of your project and add the following to your `build.zig.zon` .dependencies:
|
|
```zig
|
|
.zstbi = .{ .path = "libs/zstbi" },
|
|
```
|
|
|
|
Then in your `build.zig` add:
|
|
```zig
|
|
pub fn build(b: *std.Build) void {
|
|
const exe = b.addExecutable(.{ ... });
|
|
|
|
const zstbi = b.dependency("zstbi", .{});
|
|
exe.root_module.addImport("zstbi", zstbi.module("root"));
|
|
exe.linkLibrary(zstbi.artifact("zstbi"));
|
|
}
|
|
```
|
|
Now in your code you may import and use `zstbi`.
|
|
|
|
Init the lib. `zstbi.init()` is cheap and you may call it whenever you need to change memory allocator. Must be called from the main thread.
|
|
```zig
|
|
const zstbi = @import("zstbi");
|
|
|
|
zstbi.init(allocator);
|
|
defer zstbi.deinit();
|
|
```
|
|
```zig
|
|
pub const Image = struct {
|
|
data: []u8,
|
|
width: u32,
|
|
height: u32,
|
|
num_components: u32,
|
|
bytes_per_component: u32,
|
|
bytes_per_row: u32,
|
|
is_hdr: bool,
|
|
...
|
|
```
|
|
```zig
|
|
pub fn loadFromFile(pathname: [:0]const u8, forced_num_components: u32) !Image
|
|
|
|
pub fn loadFromMemory(data: []const u8, forced_num_components: u32) !Image
|
|
|
|
pub fn createEmpty(width: u32, height: u32, num_components: u32, args: struct {
|
|
bytes_per_component: u32 = 0,
|
|
bytes_per_row: u32 = 0,
|
|
}) !Image
|
|
|
|
pub fn info(pathname: [:0]const u8) struct {
|
|
is_supported: bool,
|
|
width: u32,
|
|
height: u32,
|
|
num_components: u32,
|
|
}
|
|
|
|
pub fn resize(image: *const Image, new_width: u32, new_height: u32) Image
|
|
|
|
pub fn writeToFile(
|
|
image: *const Image,
|
|
filename: [:0]const u8,
|
|
image_format: ImageWriteFormat,
|
|
) ImageWriteError!void
|
|
|
|
pub fn writeToFn(
|
|
image: *const Image,
|
|
write_fn: *const fn (ctx: ?*anyopaque, data: ?*anyopaque, size: c_int) callconv(.C) void,
|
|
context: ?*anyopaque,
|
|
image_format: ImageWriteFormat,
|
|
) ImageWriteError!void
|
|
```
|
|
```zig
|
|
var image = try zstbi.Image.loadFromFile("data/image.png", forced_num_components);
|
|
defer image.deinit();
|
|
|
|
const new_resized_image = image.resize(1024, 1024);
|
|
```
|
|
Misc functions:
|
|
```zig
|
|
pub fn isHdr(filename: [:0]const u8) bool
|
|
pub fn is16bit(filename: [:0]const u8) bool
|
|
|
|
pub fn setFlipVerticallyOnLoad(should_flip: bool) void
|
|
```
|