-
Notifications
You must be signed in to change notification settings - Fork 230
/
pixbuf_since_2_32.go
68 lines (53 loc) · 1.71 KB
/
pixbuf_since_2_32.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// Same copyright and license as the rest of the files in this project
// +build !gdk_pixbuf_2_2,!gdk_pixbuf_2_4,!gdk_pixbuf_2_6,!gdk_pixbuf_2_8,!gdk_pixbuf_2_12,!gdk_pixbuf_2_14,!gdk_pixbuf_2_22,!gdk_pixbuf_2_24,!gdk_pixbuf_2_26,!gdk_pixbuf_2_28,!gdk_pixbuf_2_30
package gdk
// #cgo pkg-config: gdk-3.0 glib-2.0 gobject-2.0
// #include <gdk/gdk.h>
// #include "gdk.go.h"
// #include "pixbuf.go.h"
import "C"
import (
"runtime"
"unsafe"
"github.com/gotk3/gotk3/glib"
)
// Image Data in Memory
// PixbufNewFromBytes is a wrapper around gdk_pixbuf_new_from_bytes().
// see go package "encoding/base64"
func PixbufNewFromBytes(pixbufData []byte, cs Colorspace, hasAlpha bool, bitsPerSample, width, height, rowStride int) (*Pixbuf, error) {
arrayPtr := (*C.GBytes)(unsafe.Pointer(&pixbufData[0]))
c := C.gdk_pixbuf_new_from_bytes(
arrayPtr,
C.GdkColorspace(cs),
gbool(hasAlpha),
C.int(bitsPerSample),
C.int(width),
C.int(height),
C.int(rowStride),
)
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
p := &Pixbuf{obj}
//obj.Ref()
runtime.SetFinalizer(p, func(_ interface{}) { obj.Unref() })
return p, nil
}
// PixbufNewFromBytesOnly is a convenient alternative to PixbufNewFromBytes() and also a wrapper around gdk_pixbuf_new_from_bytes().
// see go package "encoding/base64"
func PixbufNewFromBytesOnly(pixbufData []byte) (*Pixbuf, error) {
pixbufLoader, err := PixbufLoaderNew()
if err != nil {
return nil, err
}
return pixbufLoader.WriteAndReturnPixbuf(pixbufData)
}
// File loading
// TODO:
// gdk_pixbuf_get_file_info_async().
// gdk_pixbuf_get_file_info_finish().
// The GdkPixbuf Structure
// TODO:
// gdk_pixbuf_get_options().
// gdk_pixbuf_read_pixels().