From 759568193cf91d450befe6f33e5614dbc5b0dfc6 Mon Sep 17 00:00:00 2001 From: Milan Nikolic Date: Sun, 6 May 2018 13:48:27 +0200 Subject: [PATCH] Fix GetImageData --- raylib/raylib.go | 12 ------------ raylib/textures.go | 23 +++++++++++++++++++---- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/raylib/raylib.go b/raylib/raylib.go index f77d59d..0873232 100644 --- a/raylib/raylib.go +++ b/raylib/raylib.go @@ -1045,18 +1045,6 @@ type Image struct { Format PixelFormat } -// ToImage converts a Image to Go image.Image -func (i *Image) ToImage() image.Image { - img := image.NewRGBA(image.Rect(0, 0, int(i.Width), int(i.Height))) - - // Get pixel data from image (RGBA 32bit) - pixels := GetImageData(i) - - img.Pix = pixels - - return img -} - // NewImage - Returns new Image func NewImage(data []byte, width, height, mipmaps int32, format PixelFormat) *Image { d := unsafe.Pointer(&data[0]) diff --git a/raylib/textures.go b/raylib/textures.go index 087051a..024bb0d 100644 --- a/raylib/textures.go +++ b/raylib/textures.go @@ -7,6 +7,7 @@ package raylib import "C" import ( + "image" "unsafe" ) @@ -15,6 +16,20 @@ func (i *Image) cptr() *C.Image { return (*C.Image)(unsafe.Pointer(i)) } +// ToImage converts a Image to Go image.Image +func (i *Image) ToImage() image.Image { + img := image.NewRGBA(image.Rect(0, 0, int(i.Width), int(i.Height))) + + // Get pixel data from image (RGBA 32bit) + cimg := i.cptr() + ret := C.GetImageData(*cimg) + pixels := (*[1 << 30]uint8)(unsafe.Pointer(ret))[0 : i.Width*i.Height*4] + + img.Pix = pixels + + return img +} + // cptr returns C pointer func (t *Texture2D) cptr() *C.Texture2D { return (*C.Texture2D)(unsafe.Pointer(t)) @@ -113,10 +128,10 @@ func UnloadRenderTexture(target RenderTexture2D) { } // GetImageData - Get pixel data from image -func GetImageData(image *Image) []byte { - cimage := image.cptr() - ret := C.GetImageData(*cimage) - return (*[1 << 30]uint8)(unsafe.Pointer(ret))[:] +func GetImageData(img *Image) []Color { + cimg := img.cptr() + ret := C.GetImageData(*cimg) + return (*[1 << 30]Color)(unsafe.Pointer(ret))[0 : img.Width*img.Height] } // GetPixelDataSize - Get pixel data size in bytes (image or texture)