Re: Opacity in Image.getPixelReader.getColor()

2014-03-19 Thread Jim Graham
Kevin and Jasper hit the nail on the head (Jasper's comment that the 
words are usually associated with particular ranges is mostly true 
AFAIRemember, but I can't guarantee it).


If there is part of the documentation here that could be made clearer, 
let us know...


...jim

On 3/17/14 1:07 PM, Tom Schindl wrote:

Hi,

Yes it looks like i mixed this up with transparency!

Tom

On 17.03.14 10:03, Kevin Rushforth wrote:

I'm sure Jim could word this better, but here goes...

Opacity and alpha are mostly used interchangeably. Whether the range is
expressed as a normalized value [0.0,1.0] or an 8-bit pixel value
[0,255], the meaning is the same. A value of 0 means that the color is
completely transparent. When using the default SRC_OVER blend equation,
a pixel with this color will have no effect. A value of 1.0 (if using a
normalized value) or 255 (if using an 8-bit integer value) means that
the color is fully opaque. When using the default SRC_OVER blend
equation, a pixel with this color will overwrite whatever is underneath it.

Perhaps Tom is thinking of transparency which, if we were to have such
an attribute, would be defined as (1.0-opacity).

-- Kevin


Jasper Potts wrote:

My understanding is alpha and opacity are same just different range.
Opacity is 0.0 to 1.0
Alpha is 0 to 255

Jim or Kevin will be authority on this.
Jasper



On Mar 16, 2014, at 5:55 AM, Tom Schindl
tom.schi...@bestsolution.at wrote:

Hi,

Maybe I'm completely wrong but to me it looks like the opacity I get
from Image.getPixelReader.getColor() is wrong.

If not mistaken the relation between alpha and opacity is expressed
with:

opacity = (255 - alpha) / 255.0

which means:

opacity 0 = alpha 255
opacity 1 = alpha 0

Running the following programm on a gif



public class OpacityBug extends Application {

@Override
public void start(Stage primaryStage) throws Exception {
Image image = new
Image(getClass().getResourceAsStream(methpri_obj.gif));
int width = (int) image.getWidth();
int height = (int) image.getHeight();
   PixelReader reader = image.getPixelReader();
for (int x = width - 1; x = 0; x--) {
for (int y = height - 1; y = 0; y--) {
int argb = reader.getArgb(x, y);
int alphaArgb = (argb  24)  0xFF;
Color color = reader.getColor(x, y);
double opacity = color.getOpacity();
System.err.println(x+,+y +  = alpha:  +
alphaArgb +  op:  + opacity +  op-alpha:  +
opacityToAlpha(opacity) +  color:  + color);
}
}
}
  private static int opacityToAlpha(double opacity) {
return (int)Math.roundopacity * 255.0) - 255) * -1));
}

public static void main(String[] args) {
Application.launch(args);
}
}


produces and output like:
15,15 = alpha: 0 op: 0.0 op-alpha: 255 color: 0x

which to my understanding is wrong. The argb value is correct (if
compared to the image because the pixel at 15,15 is fully transparent)
but then the the opacity should be 1.0 but is the opposite.

Looking at the code in Image I see:


@Override
public Color getColor(int x, int y) {
int argb = getArgb(x, y);
int a = argb  24;
int r = (argb  16)  0xff;
int g = (argb   8)  0xff;
int b = (argb  )  0xff;
return Color.rgb(r, g, b, a / 255.0);
}


which means that:
a) my formula from the above is wrong
b) or there's the bug because it should be
   return Color.rgb(r, g, b, (255 - a) / 255.0);

May I also suggest to add get a
- Color.argb(int r,int g,int b,int alpha)
maybe it is just me but I'm so much more used to alpha than opacity that
I always have to look it up when i need it.

Tom





Re: Opacity in Image.getPixelReader.getColor()

2014-03-17 Thread Jasper Potts
My understanding is alpha and opacity are same just different range. 

Opacity is 0.0 to 1.0
Alpha is 0 to 255

Jim or Kevin will be authority on this. 

Jasper

 On Mar 16, 2014, at 5:55 AM, Tom Schindl tom.schi...@bestsolution.at wrote:
 
 Hi,
 
 Maybe I'm completely wrong but to me it looks like the opacity I get
 from Image.getPixelReader.getColor() is wrong.
 
 If not mistaken the relation between alpha and opacity is expressed with:
 
 opacity = (255 - alpha) / 255.0
 
 which means:
 
 opacity 0 = alpha 255
 opacity 1 = alpha 0
 
 Running the following programm on a gif
 
 public class OpacityBug extends Application {
 
@Override
public void start(Stage primaryStage) throws Exception {
Image image = new 
 Image(getClass().getResourceAsStream(methpri_obj.gif));
int width = (int) image.getWidth();
int height = (int) image.getHeight();

PixelReader reader = image.getPixelReader();
for (int x = width - 1; x = 0; x--) {
for (int y = height - 1; y = 0; y--) {
int argb = reader.getArgb(x, y);
int alphaArgb = (argb  24)  0xFF;
Color color = reader.getColor(x, y);
double opacity = color.getOpacity();
System.err.println(x+,+y +  = alpha:  +  alphaArgb +  
 op:  + opacity +  op-alpha:  + opacityToAlpha(opacity) +  color:  + 
 color);
}
}
}


private static int opacityToAlpha(double opacity) {
return (int)Math.roundopacity * 255.0) - 255) * -1));
}
 
public static void main(String[] args) {
Application.launch(args);
}
 }
 
 produces and output like:
 15,15 = alpha: 0 op: 0.0 op-alpha: 255 color: 0x
 
 which to my understanding is wrong. The argb value is correct (if
 compared to the image because the pixel at 15,15 is fully transparent)
 but then the the opacity should be 1.0 but is the opposite.
 
 Looking at the code in Image I see:
 @Override
public Color getColor(int x, int y) {
int argb = getArgb(x, y);
int a = argb  24;
int r = (argb  16)  0xff;
int g = (argb   8)  0xff;
int b = (argb  )  0xff;
return Color.rgb(r, g, b, a / 255.0);
}
 
 which means that:
 a) my formula from the above is wrong
 b) or there's the bug because it should be
   return Color.rgb(r, g, b, (255 - a) / 255.0);
 
 May I also suggest to add get a
 - Color.argb(int r,int g,int b,int alpha)
 maybe it is just me but I'm so much more used to alpha than opacity that
 I always have to look it up when i need it.
 
 Tom


Re: Opacity in Image.getPixelReader.getColor()

2014-03-17 Thread Gerrit Grunwald
+1 
Am 17.03.2014 um 17:51 schrieb Jasper Potts jasper.po...@oracle.com:

 My understanding is alpha and opacity are same just different range. 
 
 Opacity is 0.0 to 1.0
 Alpha is 0 to 255
 
 Jim or Kevin will be authority on this. 
 
 Jasper
 
 On Mar 16, 2014, at 5:55 AM, Tom Schindl tom.schi...@bestsolution.at wrote:
 
 Hi,
 
 Maybe I'm completely wrong but to me it looks like the opacity I get
 from Image.getPixelReader.getColor() is wrong.
 
 If not mistaken the relation between alpha and opacity is expressed with:
 
 opacity = (255 - alpha) / 255.0
 
 which means:
 
 opacity 0 = alpha 255
 opacity 1 = alpha 0
 
 Running the following programm on a gif
 
 public class OpacityBug extends Application {
 
   @Override
   public void start(Stage primaryStage) throws Exception {
   Image image = new 
 Image(getClass().getResourceAsStream(methpri_obj.gif));
   int width = (int) image.getWidth();
   int height = (int) image.getHeight();
 
   PixelReader reader = image.getPixelReader();
   for (int x = width - 1; x = 0; x--) {
   for (int y = height - 1; y = 0; y--) {
   int argb = reader.getArgb(x, y);
   int alphaArgb = (argb  24)  0xFF;
   Color color = reader.getColor(x, y);
   double opacity = color.getOpacity();
   System.err.println(x+,+y +  = alpha:  +  alphaArgb +  
 op:  + opacity +  op-alpha:  + opacityToAlpha(opacity) +  color:  + 
 color);
   }
   }
   }
 
 
   private static int opacityToAlpha(double opacity) {
   return (int)Math.roundopacity * 255.0) - 255) * -1));
   }
 
   public static void main(String[] args) {
   Application.launch(args);
   }
 }
 
 produces and output like:
 15,15 = alpha: 0 op: 0.0 op-alpha: 255 color: 0x
 
 which to my understanding is wrong. The argb value is correct (if
 compared to the image because the pixel at 15,15 is fully transparent)
 but then the the opacity should be 1.0 but is the opposite.
 
 Looking at the code in Image I see:
 @Override
   public Color getColor(int x, int y) {
   int argb = getArgb(x, y);
   int a = argb  24;
   int r = (argb  16)  0xff;
   int g = (argb   8)  0xff;
   int b = (argb  )  0xff;
   return Color.rgb(r, g, b, a / 255.0);
   }
 
 which means that:
 a) my formula from the above is wrong
 b) or there's the bug because it should be
  return Color.rgb(r, g, b, (255 - a) / 255.0);
 
 May I also suggest to add get a
 - Color.argb(int r,int g,int b,int alpha)
 maybe it is just me but I'm so much more used to alpha than opacity that
 I always have to look it up when i need it.
 
 Tom



Re: Opacity in Image.getPixelReader.getColor()

2014-03-17 Thread Kevin Rushforth

I'm sure Jim could word this better, but here goes...

Opacity and alpha are mostly used interchangeably. Whether the range is 
expressed as a normalized value [0.0,1.0] or an 8-bit pixel value 
[0,255], the meaning is the same. A value of 0 means that the color is 
completely transparent. When using the default SRC_OVER blend equation, 
a pixel with this color will have no effect. A value of 1.0 (if using a 
normalized value) or 255 (if using an 8-bit integer value) means that 
the color is fully opaque. When using the default SRC_OVER blend 
equation, a pixel with this color will overwrite whatever is underneath it.


Perhaps Tom is thinking of transparency which, if we were to have such 
an attribute, would be defined as (1.0-opacity).


-- Kevin


Jasper Potts wrote:
My understanding is alpha and opacity are same just different range. 


Opacity is 0.0 to 1.0
Alpha is 0 to 255

Jim or Kevin will be authority on this. 


Jasper

  

On Mar 16, 2014, at 5:55 AM, Tom Schindl tom.schi...@bestsolution.at wrote:

Hi,

Maybe I'm completely wrong but to me it looks like the opacity I get
from Image.getPixelReader.getColor() is wrong.

If not mistaken the relation between alpha and opacity is expressed with:

opacity = (255 - alpha) / 255.0

which means:

opacity 0 = alpha 255
opacity 1 = alpha 0

Running the following programm on a gif



public class OpacityBug extends Application {

   @Override
   public void start(Stage primaryStage) throws Exception {
   Image image = new 
Image(getClass().getResourceAsStream(methpri_obj.gif));
   int width = (int) image.getWidth();
   int height = (int) image.getHeight();
   
   PixelReader reader = image.getPixelReader();

   for (int x = width - 1; x = 0; x--) {
   for (int y = height - 1; y = 0; y--) {
   int argb = reader.getArgb(x, y);
   int alphaArgb = (argb  24)  0xFF;
   Color color = reader.getColor(x, y);
   double opacity = color.getOpacity();
   System.err.println(x+,+y +  = alpha:  +  alphaArgb +  op:  + opacity +  
op-alpha:  + opacityToAlpha(opacity) +  color:  + color);
   }
   }
   }
   
   
   private static int opacityToAlpha(double opacity) {

   return (int)Math.roundopacity * 255.0) - 255) * -1));
   }

   public static void main(String[] args) {
   Application.launch(args);
   }
}
  

produces and output like:
15,15 = alpha: 0 op: 0.0 op-alpha: 255 color: 0x

which to my understanding is wrong. The argb value is correct (if
compared to the image because the pixel at 15,15 is fully transparent)
but then the the opacity should be 1.0 but is the opposite.

Looking at the code in Image I see:


@Override
   public Color getColor(int x, int y) {
   int argb = getArgb(x, y);
   int a = argb  24;
   int r = (argb  16)  0xff;
   int g = (argb   8)  0xff;
   int b = (argb  )  0xff;
   return Color.rgb(r, g, b, a / 255.0);
   }
  

which means that:
a) my formula from the above is wrong
b) or there's the bug because it should be
  return Color.rgb(r, g, b, (255 - a) / 255.0);

May I also suggest to add get a
- Color.argb(int r,int g,int b,int alpha)
maybe it is just me but I'm so much more used to alpha than opacity that
I always have to look it up when i need it.

Tom



Re: Opacity in Image.getPixelReader.getColor()

2014-03-17 Thread Tom Schindl
Hi,

Yes it looks like i mixed this up with transparency!

Tom

On 17.03.14 10:03, Kevin Rushforth wrote:
 I'm sure Jim could word this better, but here goes...
 
 Opacity and alpha are mostly used interchangeably. Whether the range is
 expressed as a normalized value [0.0,1.0] or an 8-bit pixel value
 [0,255], the meaning is the same. A value of 0 means that the color is
 completely transparent. When using the default SRC_OVER blend equation,
 a pixel with this color will have no effect. A value of 1.0 (if using a
 normalized value) or 255 (if using an 8-bit integer value) means that
 the color is fully opaque. When using the default SRC_OVER blend
 equation, a pixel with this color will overwrite whatever is underneath it.
 
 Perhaps Tom is thinking of transparency which, if we were to have such
 an attribute, would be defined as (1.0-opacity).
 
 -- Kevin
 
 
 Jasper Potts wrote:
 My understanding is alpha and opacity are same just different range.
 Opacity is 0.0 to 1.0
 Alpha is 0 to 255

 Jim or Kevin will be authority on this.
 Jasper

  
 On Mar 16, 2014, at 5:55 AM, Tom Schindl
 tom.schi...@bestsolution.at wrote:

 Hi,

 Maybe I'm completely wrong but to me it looks like the opacity I get
 from Image.getPixelReader.getColor() is wrong.

 If not mistaken the relation between alpha and opacity is expressed
 with:

 opacity = (255 - alpha) / 255.0

 which means:

 opacity 0 = alpha 255
 opacity 1 = alpha 0

 Running the following programm on a gif


 public class OpacityBug extends Application {

@Override
public void start(Stage primaryStage) throws Exception {
Image image = new
 Image(getClass().getResourceAsStream(methpri_obj.gif));
int width = (int) image.getWidth();
int height = (int) image.getHeight();
   PixelReader reader = image.getPixelReader();
for (int x = width - 1; x = 0; x--) {
for (int y = height - 1; y = 0; y--) {
int argb = reader.getArgb(x, y);
int alphaArgb = (argb  24)  0xFF;
Color color = reader.getColor(x, y);
double opacity = color.getOpacity();
System.err.println(x+,+y +  = alpha:  + 
 alphaArgb +  op:  + opacity +  op-alpha:  +
 opacityToAlpha(opacity) +  color:  + color);
}
}
}
  private static int opacityToAlpha(double opacity) {
return (int)Math.roundopacity * 255.0) - 255) * -1));
}

public static void main(String[] args) {
Application.launch(args);
}
 }
   
 produces and output like:
 15,15 = alpha: 0 op: 0.0 op-alpha: 255 color: 0x

 which to my understanding is wrong. The argb value is correct (if
 compared to the image because the pixel at 15,15 is fully transparent)
 but then the the opacity should be 1.0 but is the opposite.

 Looking at the code in Image I see:

 @Override
public Color getColor(int x, int y) {
int argb = getArgb(x, y);
int a = argb  24;
int r = (argb  16)  0xff;
int g = (argb   8)  0xff;
int b = (argb  )  0xff;
return Color.rgb(r, g, b, a / 255.0);
}
   
 which means that:
 a) my formula from the above is wrong
 b) or there's the bug because it should be
   return Color.rgb(r, g, b, (255 - a) / 255.0);

 May I also suggest to add get a
 - Color.argb(int r,int g,int b,int alpha)
 maybe it is just me but I'm so much more used to alpha than opacity that
 I always have to look it up when i need it.

 Tom
 



Opacity in Image.getPixelReader.getColor()

2014-03-16 Thread Tom Schindl
Hi,

Maybe I'm completely wrong but to me it looks like the opacity I get
from Image.getPixelReader.getColor() is wrong.

If not mistaken the relation between alpha and opacity is expressed with:

opacity = (255 - alpha) / 255.0

which means:

opacity 0 = alpha 255
opacity 1 = alpha 0

Running the following programm on a gif

 public class OpacityBug extends Application {
 
   @Override
   public void start(Stage primaryStage) throws Exception {
   Image image = new 
 Image(getClass().getResourceAsStream(methpri_obj.gif));
   int width = (int) image.getWidth();
   int height = (int) image.getHeight();
   
   PixelReader reader = image.getPixelReader();
   for (int x = width - 1; x = 0; x--) {
   for (int y = height - 1; y = 0; y--) {
   int argb = reader.getArgb(x, y);
   int alphaArgb = (argb  24)  0xFF;
   Color color = reader.getColor(x, y);
   double opacity = color.getOpacity();
   System.err.println(x+,+y +  = alpha:  +  
 alphaArgb +  op:  + opacity +  op-alpha:  + opacityToAlpha(opacity) +  
 color:  + color);
   }
   }
   }
   
   
   private static int opacityToAlpha(double opacity) {
   return (int)Math.roundopacity * 255.0) - 255) * -1));
   }
 
   public static void main(String[] args) {
   Application.launch(args);
   }
 }

produces and output like:
15,15 = alpha: 0 op: 0.0 op-alpha: 255 color: 0x

which to my understanding is wrong. The argb value is correct (if
compared to the image because the pixel at 15,15 is fully transparent)
but then the the opacity should be 1.0 but is the opposite.

Looking at the code in Image I see:
 @Override
 public Color getColor(int x, int y) {
 int argb = getArgb(x, y);
 int a = argb  24;
 int r = (argb  16)  0xff;
 int g = (argb   8)  0xff;
 int b = (argb  )  0xff;
 return Color.rgb(r, g, b, a / 255.0);
 }

which means that:
a) my formula from the above is wrong
b) or there's the bug because it should be
   return Color.rgb(r, g, b, (255 - a) / 255.0);

May I also suggest to add get a
- Color.argb(int r,int g,int b,int alpha)
maybe it is just me but I'm so much more used to alpha than opacity that
I always have to look it up when i need it.

Tom