github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/image/raw/util.go (about) 1 // Copyright 2014 <chaishushan{AT}gmail.com>. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package raw 6 7 import ( 8 "image" 9 "reflect" 10 11 image_ext "github.com/chai2010/gopkg/image" 12 ) 13 14 func defaultDepthKind(depth int) reflect.Kind { 15 switch depth { 16 case 8: 17 return reflect.Uint8 18 case 16: 19 return reflect.Uint16 20 case 32: 21 return reflect.Float32 22 } 23 return reflect.Uint16 24 } 25 26 func newBytes(size int, buf []byte) []byte { 27 if len(buf) >= size { 28 return buf[:size] 29 } 30 return make([]byte, size) 31 } 32 33 func newGray(r image.Rectangle, buf image_ext.ImageBuffer) *image.Gray { 34 if buf != nil && r.In(buf.Bounds()) { 35 if m, ok := buf.SubImage(r).(*image.Gray); ok { 36 return m 37 } 38 } 39 return image.NewGray(r) 40 } 41 42 func newGray16(r image.Rectangle, buf image_ext.ImageBuffer) *image.Gray16 { 43 if buf != nil && r.In(buf.Bounds()) { 44 if m, ok := buf.SubImage(r).(*image.Gray16); ok { 45 return m 46 } 47 } 48 return image.NewGray16(r) 49 } 50 51 func newGray32f(r image.Rectangle, buf image_ext.ImageBuffer) *image_ext.Gray32f { 52 if buf != nil && r.In(buf.Bounds()) { 53 if m, ok := buf.SubImage(r).(*image_ext.Gray32f); ok { 54 return m 55 } 56 } 57 return image_ext.NewGray32f(r) 58 } 59 60 func newRGB(r image.Rectangle, buf image_ext.ImageBuffer) *image_ext.RGB { 61 if buf != nil && r.In(buf.Bounds()) { 62 if m, ok := buf.SubImage(r).(*image_ext.RGB); ok { 63 return m 64 } 65 } 66 return image_ext.NewRGB(r) 67 } 68 69 func newRGB48(r image.Rectangle, buf image_ext.ImageBuffer) *image_ext.RGB48 { 70 if buf != nil && r.In(buf.Bounds()) { 71 if m, ok := buf.SubImage(r).(*image_ext.RGB48); ok { 72 return m 73 } 74 } 75 return image_ext.NewRGB48(r) 76 } 77 78 func newRGB96f(r image.Rectangle, buf image_ext.ImageBuffer) *image_ext.RGB96f { 79 if buf != nil && r.In(buf.Bounds()) { 80 if m, ok := buf.SubImage(r).(*image_ext.RGB96f); ok { 81 return m 82 } 83 } 84 return image_ext.NewRGB96f(r) 85 } 86 87 func newRGBA(r image.Rectangle, buf image_ext.ImageBuffer) *image.RGBA { 88 if buf != nil && r.In(buf.Bounds()) { 89 if m, ok := buf.SubImage(r).(*image.RGBA); ok { 90 return m 91 } 92 } 93 return image.NewRGBA(r) 94 } 95 96 func newRGBA64(r image.Rectangle, buf image_ext.ImageBuffer) *image.RGBA64 { 97 if buf != nil && r.In(buf.Bounds()) { 98 if m, ok := buf.SubImage(r).(*image.RGBA64); ok { 99 return m 100 } 101 } 102 return image.NewRGBA64(r) 103 } 104 105 func newRGBA128f(r image.Rectangle, buf image_ext.ImageBuffer) *image_ext.RGBA128f { 106 if buf != nil && r.In(buf.Bounds()) { 107 if m, ok := buf.SubImage(r).(*image_ext.RGBA128f); ok { 108 return m 109 } 110 } 111 return image_ext.NewRGBA128f(r) 112 }