Skip to content

Instantly share code, notes, and snippets.

@wendigojaeger
Created December 22, 2019 18:24
Show Gist options
  • Save wendigojaeger/ffc882646761efa1a6ecbdddbfacab4b to your computer and use it in GitHub Desktop.
Save wendigojaeger/ffc882646761efa1a6ecbdddbfacab4b to your computer and use it in GitHub Desktop.
pub fn fromFile(allocator: *Allocator, filePath: []const u8) !Bitmap {
var result = init(allocator);
var absolutePath = try path.resolve(allocator, &[_][]const u8{filePath});
defer allocator.free(absolutePath);
var file = try fs.openFileAbsolute(absolutePath, File.OpenFlags{});
defer file.close();
var fileInStream = file.inStream();
try internalRead(&fileInStream.stream, &result);
return result;
}
pub fn fromMemory(allocator: *Allocator, buffer: []const u8) !Bitmap {
var result = init(allocator);
var memoryInStream = SliceInStream.init(buffer);
try internalRead(&memoryInStream.stream, &result);
return result;
}
fn internalRead(inStream: *io.InStream(anyerror), bitmap: *Bitmap) !void {
_ = try inStream.read(bitmap.fileHeader.magicHeader[0..]);
if (!mem.eql(u8, bitmap.fileHeader.magicHeader[0..], BitmapMagicHeader[0..])) {
return errors.ImageError.InvalidHeader;
}
bitmap.fileHeader.size = try inStream.readIntLittle(u32);
bitmap.fileHeader.reserved = try inStream.readIntLittle(u32);
bitmap.fileHeader.pixelOffset = try inStream.readIntLittle(u32);
}
C:\Programmation\Zig\GBA\zigimg\src\bmp.zig:82:39: error: expected type '*std.io.in_stream.InStream(anyerror)', found '*std.io.in_stream.InStream(std.os.ReadError)'
try internalRead(&fileInStream.stream, &result);
^
C:\Programmation\Zig\GBA\zigimg\src\bmp.zig:82:39: note: pointer type child 'std.io.in_stream.InStream(std.os.ReadError)' cannot cast into pointer type child 'std.io.in_stream.InStream(anyerror)'
try internalRead(&fileInStream.stream, &result);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment