Improve Flash target color conversion (Image API)
This commit is contained in:
@@ -12,6 +12,9 @@ import lime.graphics.format.JPEG;
|
||||
import lime.graphics.format.PNG;
|
||||
import lime.graphics.utils.ImageCanvasUtil;
|
||||
import lime.graphics.utils.ImageDataUtil;
|
||||
import lime.math.color.ARGB;
|
||||
import lime.math.color.BGRA;
|
||||
import lime.math.color.RGBA;
|
||||
import lime.math.ColorMatrix;
|
||||
import lime.math.Rectangle;
|
||||
import lime.math.Vector2;
|
||||
@@ -388,8 +391,16 @@ class Image {
|
||||
case FLASH:
|
||||
|
||||
rect.offset (offsetX, offsetY);
|
||||
if (format == null || format == RGBA32) color = ((color & 0xFF) << 24) | (color >> 8);
|
||||
buffer.__srcBitmapData.fillRect (rect.__toFlashRectangle (), color);
|
||||
|
||||
var argb:ARGB = switch (format) {
|
||||
|
||||
case ARGB32: color;
|
||||
case BGRA32: (color:BGRA);
|
||||
default: (color:RGBA);
|
||||
|
||||
}
|
||||
|
||||
buffer.__srcBitmapData.fillRect (rect.__toFlashRectangle (), argb);
|
||||
|
||||
default:
|
||||
|
||||
@@ -418,8 +429,15 @@ class Image {
|
||||
|
||||
case FLASH:
|
||||
|
||||
if (format == null || format == RGBA32) color = ((color & 0xFF) << 24) | (color >> 8);
|
||||
buffer.__srcBitmapData.floodFill (x + offsetX, y + offsetY, color);
|
||||
var argb:ARGB = switch (format) {
|
||||
|
||||
case ARGB32: color;
|
||||
case BGRA32: (color:BGRA);
|
||||
default: (color:RGBA);
|
||||
|
||||
}
|
||||
|
||||
buffer.__srcBitmapData.floodFill (x + offsetX, y + offsetY, argb);
|
||||
|
||||
default:
|
||||
|
||||
@@ -536,15 +554,13 @@ class Image {
|
||||
|
||||
case FLASH:
|
||||
|
||||
var color = buffer.__srcBitmapData.getPixel (x + offsetX, y + offsetY);
|
||||
var color:ARGB = buffer.__srcBitmapData.getPixel (x + offsetX, y + offsetY);
|
||||
|
||||
if (format == null || format == RGBA32) {
|
||||
switch (format) {
|
||||
|
||||
return ((color & 0xFF) << 24) | (color >> 8);
|
||||
|
||||
} else {
|
||||
|
||||
return color;
|
||||
case ARGB32: return color;
|
||||
case BGRA32: var bgra:BGRA = color; return bgra;
|
||||
default: var rgba:RGBA = color; return rgba;
|
||||
|
||||
}
|
||||
|
||||
@@ -577,15 +593,13 @@ class Image {
|
||||
|
||||
case FLASH:
|
||||
|
||||
var color = buffer.__srcBitmapData.getPixel32 (x + offsetX, y + offsetY);
|
||||
var color:ARGB = buffer.__srcBitmapData.getPixel32 (x + offsetX, y + offsetY);
|
||||
|
||||
if (format == null || format == RGBA32) {
|
||||
switch (format) {
|
||||
|
||||
return ((color & 0xFF) << 24) | (color >> 8);
|
||||
|
||||
} else {
|
||||
|
||||
return color;
|
||||
case ARGB32: return color;
|
||||
case BGRA32: var bgra:BGRA = color; return bgra;
|
||||
default: var rgba:RGBA = color; return rgba;
|
||||
|
||||
}
|
||||
|
||||
@@ -621,20 +635,38 @@ class Image {
|
||||
rect.offset (offsetX, offsetY);
|
||||
var byteArray = buffer.__srcBitmapData.getPixels (rect.__toFlashRectangle ());
|
||||
|
||||
if (format == null || format == RGBA32) {
|
||||
switch (format) {
|
||||
|
||||
var color;
|
||||
var length = Std.int (byteArray.length / 4);
|
||||
|
||||
for (i in 0...length) {
|
||||
case ARGB32: // do nothing
|
||||
case BGRA32:
|
||||
|
||||
color = byteArray.readUnsignedInt ();
|
||||
byteArray.position -= 4;
|
||||
byteArray.writeUnsignedInt (((color & 0xFF) << 24) | (color >> 8));
|
||||
var color:BGRA;
|
||||
var length = Std.int (byteArray.length / 4);
|
||||
|
||||
}
|
||||
for (i in 0...length) {
|
||||
|
||||
color = (byteArray.readUnsignedInt ():ARGB);
|
||||
byteArray.position -= 4;
|
||||
byteArray.writeUnsignedInt (color);
|
||||
|
||||
}
|
||||
|
||||
byteArray.position = 0;
|
||||
|
||||
byteArray.position = 0;
|
||||
default:
|
||||
|
||||
var color:RGBA;
|
||||
var length = Std.int (byteArray.length / 4);
|
||||
|
||||
for (i in 0...length) {
|
||||
|
||||
color = (byteArray.readUnsignedInt ():ARGB);
|
||||
byteArray.position -= 4;
|
||||
byteArray.writeUnsignedInt (color);
|
||||
|
||||
}
|
||||
|
||||
byteArray.position = 0;
|
||||
|
||||
}
|
||||
|
||||
@@ -771,8 +803,15 @@ class Image {
|
||||
|
||||
case FLASH:
|
||||
|
||||
if (format == null || format == RGBA32) color = ((color & 0xFF) << 24) | (color >> 8);
|
||||
buffer.__srcBitmapData.setPixel (x + offsetX, y + offsetX, color);
|
||||
var argb:ARGB = switch (format) {
|
||||
|
||||
case ARGB32: color;
|
||||
case BGRA32: (color:BGRA);
|
||||
default: (color:RGBA);
|
||||
|
||||
}
|
||||
|
||||
buffer.__srcBitmapData.setPixel (x + offsetX, y + offsetX, argb);
|
||||
|
||||
default:
|
||||
|
||||
@@ -801,8 +840,15 @@ class Image {
|
||||
|
||||
case FLASH:
|
||||
|
||||
if (format == null || format == RGBA32) color = ((color & 0xFF) << 24) | (color >> 8);
|
||||
buffer.__srcBitmapData.setPixel32 (x + offsetX, y + offsetY, color);
|
||||
var argb:ARGB = switch (format) {
|
||||
|
||||
case ARGB32: color;
|
||||
case BGRA32: (color:BGRA);
|
||||
default: (color:RGBA);
|
||||
|
||||
}
|
||||
|
||||
buffer.__srcBitmapData.setPixel32 (x + offsetX, y + offsetY, argb);
|
||||
|
||||
default:
|
||||
|
||||
@@ -833,27 +879,54 @@ class Image {
|
||||
case FLASH:
|
||||
|
||||
rect.offset (offsetX, offsetY);
|
||||
if (format == null || format == RGBA32) {
|
||||
|
||||
switch (format) {
|
||||
|
||||
var srcData = byteArray;
|
||||
byteArray = new ByteArray ();
|
||||
#if flash
|
||||
byteArray.length = srcData.length;
|
||||
#end
|
||||
|
||||
var color;
|
||||
var length = Std.int (byteArray.length / 4);
|
||||
|
||||
for (i in 0...length) {
|
||||
case ARGB32: // do nothing
|
||||
case BGRA32:
|
||||
|
||||
color = srcData.readUnsignedInt ();
|
||||
byteArray.writeUnsignedInt (((color & 0xFF) << 24) | (color >> 8));
|
||||
var srcData = byteArray;
|
||||
byteArray = new ByteArray ();
|
||||
#if flash
|
||||
byteArray.length = srcData.length;
|
||||
#end
|
||||
|
||||
}
|
||||
var color:BGRA;
|
||||
var length = Std.int (byteArray.length / 4);
|
||||
|
||||
for (i in 0...length) {
|
||||
|
||||
color = srcData.readUnsignedInt ();
|
||||
byteArray.writeUnsignedInt (cast (color, ARGB));
|
||||
|
||||
}
|
||||
|
||||
srcData.position = 0;
|
||||
byteArray.position = 0;
|
||||
|
||||
default:
|
||||
|
||||
var srcData = byteArray;
|
||||
byteArray = new ByteArray ();
|
||||
#if flash
|
||||
byteArray.length = srcData.length;
|
||||
#end
|
||||
|
||||
var color:RGBA;
|
||||
var length = Std.int (byteArray.length / 4);
|
||||
|
||||
for (i in 0...length) {
|
||||
|
||||
color = srcData.readUnsignedInt ();
|
||||
byteArray.writeUnsignedInt (cast (color, ARGB));
|
||||
|
||||
}
|
||||
|
||||
srcData.position = 0;
|
||||
byteArray.position = 0;
|
||||
|
||||
srcData.position = 0;
|
||||
byteArray.position = 0;
|
||||
}
|
||||
|
||||
buffer.__srcBitmapData.setPixels (rect.__toFlashRectangle (), byteArray);
|
||||
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user