PageRenderTime 34ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 1ms

/freeimage/Bitmap.ooc

http://github.com/tsion/ooc-freeimage
Unknown | 161 lines | 129 code | 32 blank | 0 comment | 0 complexity | 91ef6c8447c4e084955289f42c476f35 MD5 | raw file
  1. use freeimage
  2. import io/File
  3. import freeimage/[ImageFormat, IOHandler]
  4. Bitmap: cover from FIBITMAP* {
  5. new: static func (width, height, bpp: Int) -> This {
  6. FreeImage_Allocate(width, height, bpp, 0, 0, 0)
  7. }
  8. new: static func ~fromPath (path: String) -> This {
  9. fif := ImageFormat unknown
  10. fif = FreeImage_GetFileType(path, 0)
  11. if (fif == ImageFormat unknown) {
  12. fif = FreeImage_GetFIFFromFilename(path)
  13. }
  14. if ((fif != ImageFormat unknown) && FreeImage_FIFSupportsReading(fif)) {
  15. bitmap := FreeImage_Load(fif, path, 0)
  16. return bitmap
  17. }
  18. return null
  19. }
  20. new: static func ~fromFile (file: File) -> This {
  21. This new(file path)
  22. }
  23. new: static func ~fromHandle (io: IOHandler*, handle: FStream) -> This {
  24. fif := ImageFormat unknown
  25. fif = FreeImage_GetFileTypeFromHandle(io, handle, 0)
  26. if ((fif != ImageFormat unknown) && FreeImage_FIFSupportsReading(fif)) {
  27. bitmap := FreeImage_LoadFromHandle(fif, io, handle, 0)
  28. return bitmap
  29. }
  30. return null
  31. }
  32. clone: extern(FreeImage_Clone) func -> This
  33. save: func (filename: String, format: ImageFormat) -> Bool {
  34. FreeImage_Save(format, this, filename, 0)
  35. }
  36. unload: extern(FreeImage_Unload) func
  37. width: Int {
  38. get: extern(FreeImage_GetWidth)
  39. }
  40. height: Int {
  41. get: extern(FreeImage_GetHeight)
  42. }
  43. bpp: Int {
  44. get: extern(FreeImage_GetBPP)
  45. }
  46. imageType: extern(FreeImage_GetImageType) func -> ImageType
  47. // Pixel access functions
  48. bits: extern(FreeImage_GetBits) func -> UInt8*
  49. scanline: extern(FreeImage_GetScanLine) func (Int) -> UInt8*
  50. getPixelIndex: func (x, y: UInt) -> UInt8 {
  51. index: UInt8
  52. FreeImage_GetPixelIndex(this, x, y, index&)
  53. return index
  54. }
  55. getPixelColor: func (x, y: UInt) -> RGBQuad {
  56. color := RGBQuad new()
  57. FreeImage_GetPixelColor(this, x, y, color)
  58. return color
  59. }
  60. setPixelIndex: func (x, y: UInt, index: UInt8) {
  61. FreeImage_SetPixelIndex(this, x, y, index&)
  62. }
  63. setPixelColor: func (x, y: UInt, color: RGBQuad) {
  64. FreeImage_SetPixelColor(this, x, y, color)
  65. }
  66. // Toolkit functions
  67. rescale: extern(FreeImage_Rescale) func (width, height: Int, filter: ImageFilter) -> This
  68. thumbnail: extern(FreeImage_MakeThumbnail) func (max: Int, convert: Bool) -> This
  69. thumbnail: func ~defaultConvert (max: Int) -> This {
  70. thumbnail(max, true)
  71. }
  72. }
  73. FreeImage_Allocate: extern func (Int, Int, Int, Int, Int, Int) -> Bitmap
  74. FreeImage_Load: extern func (ImageFormat, String, Int) -> Bitmap
  75. FreeImage_LoadFromHandle: extern func (ImageFormat, IOHandler*, FStream, Int) -> Bitmap
  76. FreeImage_Save: extern func (ImageFormat, Bitmap, String, Int) -> Bool
  77. FreeImage_GetFileType: extern func (String, Int) -> ImageFormat
  78. FreeImage_GetFileTypeFromHandle: extern func (IOHandler*, FStream, Int) -> ImageFormat
  79. FreeImage_GetFIFFromFilename: extern func (String) -> ImageFormat
  80. FreeImage_FIFSupportsReading: extern func (ImageFormat) -> Bool
  81. FreeImage_GetPixelIndex: extern func (Bitmap, UInt, UInt, UInt8*) -> Bool
  82. FreeImage_GetPixelColor: extern func (Bitmap, UInt, UInt, RGBQuad*) -> Bool
  83. FreeImage_SetPixelIndex: extern func (Bitmap, UInt, UInt, UInt8*) -> Bool
  84. FreeImage_SetPixelColor: extern func (Bitmap, UInt, UInt, RGBQuad*) -> Bool
  85. RGBQuadStruct: cover from RGBQUAD {
  86. red: extern(rgbRed) UInt8
  87. green: extern(rgbGreen) UInt8
  88. blue: extern(rgbBlue) UInt8
  89. reserved: extern(rgbReserved) UInt8
  90. }
  91. RGBQuad: cover from RGBQuadStruct* {
  92. new: static func (red, green, blue, reserved: UInt8) -> This {
  93. this := gc_malloc(RGBQuadStruct size) as This
  94. this@ red = red
  95. this@ green = green
  96. this@ blue = blue
  97. this@ reserved = reserved
  98. return this
  99. }
  100. new: static func ~withoutAlpha (red, green, blue: UInt8) -> This {
  101. This new(red, green, blue, 255)
  102. }
  103. new: static func ~blank -> This {
  104. This new(0, 0, 0, 0)
  105. }
  106. }
  107. ImageType: extern(FREE_IMAGE_TYPE) enum {
  108. unknown: extern(FIT_UNKNOWN)
  109. bitmap: extern(FIT_BITMAP)
  110. uint16: extern(FIT_UINT16)
  111. int16: extern(FIT_INT16)
  112. uint32: extern(FIT_UINT32)
  113. int32: extern(FIT_INT32)
  114. float: extern(FIT_FLOAT)
  115. double: extern(FIT_DOUBLE)
  116. complex: extern(FIT_COMPLEX)
  117. rgb16: extern(FIT_RGB16)
  118. rgba16: extern(FIT_RGBA16)
  119. rgbf: extern(FIT_RGBF)
  120. rgbaf: extern(FIT_RGBAF)
  121. }
  122. ImageFilter: extern(FREE_IMAGE_FILTER) enum {
  123. box: extern(FILTER_BOX)
  124. bicubic: extern(FILTER_BICUBIC)
  125. bilinear: extern(FILTER_BILINEAR)
  126. bspline: extern(FILTER_BSPLINE)
  127. catmullrom: extern(FILTER_CATMULLROM)
  128. lanczos3: extern(FILTER_LANCZOS3)
  129. }