github.com/jmigpin/editor@v1.6.0/driver/xdriver/wimage/shmimgwrap.go (about) 1 package wimage 2 3 import ( 4 "image" 5 "reflect" 6 "unsafe" 7 8 "github.com/jmigpin/editor/util/imageutil" 9 ) 10 11 type ShmImgWrap struct { 12 Img *imageutil.BGRA 13 shmId uintptr 14 addr uintptr 15 } 16 17 func NewShmImgWrap(r image.Rectangle) (*ShmImgWrap, error) { 18 size := imageutil.BGRASize(&r) 19 shmId, addr, err := ShmOpen(size) 20 if err != nil { 21 return nil, err 22 } 23 24 // mask shared mem into a slice 25 h := reflect.SliceHeader{Data: addr, Len: size, Cap: size} 26 buf := *(*[]byte)(unsafe.Pointer(&h)) 27 28 img := imageutil.NewBGRAFromBuffer(buf, &r) 29 imgWrap := &ShmImgWrap{Img: img, shmId: shmId, addr: addr} 30 return imgWrap, nil 31 } 32 33 func (imgWrap *ShmImgWrap) Close() error { 34 return ShmClose(imgWrap.shmId, imgWrap.addr) 35 }