mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-06 04:57:55 +00:00
Add image.destroy
This commit is contained in:
@@ -54,6 +54,7 @@ Image :: struct {
|
||||
*/
|
||||
background: Maybe(RGB_Pixel_16),
|
||||
metadata: Image_Metadata,
|
||||
which: Which_File_Type,
|
||||
}
|
||||
|
||||
Image_Metadata :: union {
|
||||
|
||||
@@ -43,3 +43,16 @@ load_from_file :: proc(filename: string, options := Options{}, allocator := cont
|
||||
return nil, .Unable_To_Read_File
|
||||
}
|
||||
}
|
||||
|
||||
destroy :: proc(img: ^Image, allocator := context.allocator) -> bool {
|
||||
if img == nil {
|
||||
return true
|
||||
}
|
||||
context.allocator = allocator
|
||||
destroyer := _internal_destroyers[img.which]
|
||||
if destroyer != nil {
|
||||
destroyer(img)
|
||||
}
|
||||
free(img)
|
||||
return true
|
||||
}
|
||||
@@ -47,6 +47,7 @@ load_from_bytes :: proc(data: []byte, allocator := context.allocator) -> (img: ^
|
||||
context.allocator = allocator
|
||||
|
||||
img = new(Image)
|
||||
img.which = .NetPBM
|
||||
|
||||
header: Header; defer header_destroy(&header)
|
||||
header_size: int
|
||||
@@ -758,9 +759,5 @@ _register :: proc() {
|
||||
destroyer :: proc(img: ^Image) {
|
||||
_ = destroy(img)
|
||||
}
|
||||
image.register(.PBM, loader, destroyer)
|
||||
image.register(.PGM, loader, destroyer)
|
||||
image.register(.PPM, loader, destroyer)
|
||||
image.register(.PAM, loader, destroyer)
|
||||
image.register(.PFM, loader, destroyer)
|
||||
image.register(.NetPBM, loader, destroyer)
|
||||
}
|
||||
@@ -372,6 +372,7 @@ load_from_context :: proc(ctx: ^$C, options := Options{}, allocator := context.a
|
||||
if img == nil {
|
||||
img = new(Image)
|
||||
}
|
||||
img.which = .PNG
|
||||
|
||||
info := new(image.PNG_Info)
|
||||
img.metadata = info
|
||||
|
||||
@@ -224,6 +224,7 @@ load_from_context :: proc(ctx: ^$C, options := Options{}, allocator := context.a
|
||||
if img == nil {
|
||||
img = new(Image)
|
||||
}
|
||||
img.which = .QOI
|
||||
|
||||
if .return_metadata in options {
|
||||
info := new(image.QOI_Info)
|
||||
|
||||
@@ -14,7 +14,7 @@ Which_File_Type :: enum {
|
||||
JPEG,
|
||||
JPEG_2000,
|
||||
JPEG_XL,
|
||||
PBM, PGM, PPM, PAM, PFM, // NetPBM family
|
||||
NetPBM, // NetPBM family
|
||||
PIC, // Softimage PIC
|
||||
PNG, // Portable Network Graphics
|
||||
PSD, // Photoshop PSD
|
||||
@@ -111,16 +111,16 @@ which_bytes :: proc(data: []byte) -> Which_File_Type {
|
||||
switch s[2] {
|
||||
case '\t', '\n', '\r':
|
||||
switch s[1] {
|
||||
case '1', '4':
|
||||
return .PBM
|
||||
case '2', '5':
|
||||
return .PGM
|
||||
case '3', '6':
|
||||
return .PPM
|
||||
case '7':
|
||||
return .PAM
|
||||
case 'F', 'f':
|
||||
return .PFM
|
||||
case '1', '4': // PBM
|
||||
return .NetPBM
|
||||
case '2', '5': // PGM
|
||||
return .NetPBM
|
||||
case '3', '6': // PPM
|
||||
return .NetPBM
|
||||
case '7': // PAM
|
||||
return .NetPBM
|
||||
case 'F', 'f': // PFM
|
||||
return .NetPBM
|
||||
}
|
||||
}
|
||||
case s[:8] == "\x89PNG\r\n\x1a\n":
|
||||
|
||||
Reference in New Issue
Block a user