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  }