-
Notifications
You must be signed in to change notification settings - Fork 68
/
PixelFormat.scala
138 lines (110 loc) · 5.98 KB
/
PixelFormat.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
* Copyright (c) 2011-2018, ScalaFX Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the ScalaFX Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE SCALAFX PROJECT OR ITS CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package scalafx.scene.image
import java.nio.{Buffer, ByteBuffer, IntBuffer}
import javafx.scene.{image => jfxsi}
import scalafx.Includes._
import scalafx.delegate.{SFXDelegate, SFXEnumDelegate, SFXEnumDelegateCompanion}
import scala.language.implicitConversions
object PixelFormat {
implicit def sfxPixelFormat2jfx[B <: Buffer](pf: PixelFormat[B]): jfxsi.PixelFormat[B] = pf.delegate
object Type
extends SFXEnumDelegateCompanion[jfxsi.PixelFormat.Type, Type] {
/**
* The pixels are stored in adjacent bytes with the non-premultiplied components stored in order of increasing
* index: blue, green, red, alpha.
*/
case object ByteBGRA extends Type(jfxsi.PixelFormat.Type.BYTE_BGRA)
@deprecated ("Use ByteBGRA; BYTE_BGRA will be removed in a future release", "8.0.60-R10")
val BYTE_BGRA = ByteBGRA
/**
* The pixels are stored in adjacent bytes with the premultiplied components stored in order of increasing index:
* blue, green, red, alpha.
*/
case object ByteBRGAPre extends Type(jfxsi.PixelFormat.Type.BYTE_BGRA_PRE)
@deprecated ("Use ByteBRGAPre; BYTE_BGRA_PRE will be removed in a future release", "8.0.60-R10")
val BYTE_BGRA_PRE = ByteBRGAPre
/**
* The pixel colors are referenced by byte indices stored in the pixel array, with the byte interpreted as an
* unsigned index into a list of colors provided by the PixelFormat object.
*/
case object ByteIndexed extends Type(jfxsi.PixelFormat.Type.BYTE_INDEXED)
@deprecated ("Use ByteIndexed; BYTE_INDEXED will be removed in a future release", "8.0.60-R10")
val BYTE_INDEXED = ByteIndexed
/**
* The opaque pixels are stored in adjacent bytes with the color components stored in order of increasing index:
* red, green, blue.
*/
case object ByteRGB extends Type(jfxsi.PixelFormat.Type.BYTE_RGB)
@deprecated ("Use ByteRGB; BYTE_RGB will be removed in a future release", "8.0.60-R10")
val BYTE_RGB = ByteRGB
/**
* The pixels are stored in 32-bit integers with the non-premultiplied components stored in order, from MSb to LSb:
* alpha, red, green, blue.
*/
case object IntARGB extends Type(jfxsi.PixelFormat.Type.INT_ARGB)
@deprecated ("Use IntARGB; INT_ARGB will be removed in a future release", "8.0.60-R10")
val INT_ARGB = IntARGB
/**
* The pixels are stored in 32-bit integers with the premultiplied components stored in order, from MSb to LSb:
* alpha, red, green, blue.
*/
case object IntARGBPre extends Type(jfxsi.PixelFormat.Type.INT_ARGB_PRE)
@deprecated ("Use IntARGBPre; INT_ARGB_PRE will be removed in a future release", "8.0.60-R10")
val INT_ARGB_PRE = IntARGBPre
protected override def unsortedValues: Array[Type] = Array(ByteBGRA, ByteBRGAPre, ByteIndexed, ByteRGB,
IntARGB, IntARGBPre)
}
/**
* Wraps [[http://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/PixelFormat.Type.html]]
*/
sealed abstract class Type(override val delegate: jfxsi.PixelFormat.Type)
extends SFXEnumDelegate[jfxsi.PixelFormat.Type]
def createByteIndexedInstance(colors: Array[Int]): PixelFormat[ByteBuffer] = jfxsi.PixelFormat.createByteIndexedInstance(colors)
def createByteIndexedPremultipliedInstance(colors: Array[Int]): PixelFormat[ByteBuffer] = jfxsi.PixelFormat.createByteIndexedPremultipliedInstance(colors)
def getByteBgraInstance: WritablePixelFormat[ByteBuffer] = jfxsi.PixelFormat.getByteBgraInstance
def getByteBgraPreInstance: WritablePixelFormat[ByteBuffer] = jfxsi.PixelFormat.getByteBgraPreInstance
def getByteRgbInstance: PixelFormat[ByteBuffer] = jfxsi.PixelFormat.getByteRgbInstance
def getIntArgbInstance: WritablePixelFormat[IntBuffer] = jfxsi.PixelFormat.getIntArgbInstance
def getIntArgbPreInstance: WritablePixelFormat[IntBuffer] = jfxsi.PixelFormat.getIntArgbPreInstance
}
/**
* Wraps [[http://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/PixelFormat.html]]
*/
abstract class PixelFormat[B <: Buffer](override val delegate: jfxsi.PixelFormat[B])
extends SFXDelegate[jfxsi.PixelFormat[B]] {
/**
* Reads a 32-bit integer representation of the color from the buffer at the specified coordinates.
*/
def getArgb(buf: B, x: Int, y: Int, scanlineStride: Int): Int = delegate.getArgb(buf, x, y, scanlineStride)
/**
*
*/
def getType: PixelFormat.Type = delegate.getType
def premultiplied = delegate.isPremultiplied
def writable = delegate.isWritable
}