155 lines
3.4 KiB
Haxe
155 lines
3.4 KiB
Haxe
package lime.graphics;
|
|
|
|
|
|
import lime.utils.UInt8Array;
|
|
|
|
#if (js && html5)
|
|
import js.html.CanvasElement;
|
|
import js.html.CanvasRenderingContext2D;
|
|
import js.html.Image in HTMLImage;
|
|
import js.html.ImageData;
|
|
import js.html.Uint8ClampedArray;
|
|
import js.Browser;
|
|
#elseif flash
|
|
import flash.display.BitmapData;
|
|
#end
|
|
|
|
@:allow(lime.graphics.Image)
|
|
|
|
|
|
class ImageBuffer {
|
|
|
|
|
|
public var bitsPerPixel:Int;
|
|
public var data:UInt8Array;
|
|
public var height:Int;
|
|
public var premultiplied:Bool;
|
|
public var src (get, set):Dynamic;
|
|
public var transparent:Bool;
|
|
public var width:Int;
|
|
|
|
@:noCompletion private var __srcBitmapData:#if flash BitmapData #else Dynamic #end;
|
|
@:noCompletion private var __srcCanvas:#if (js && html5) CanvasElement #else Dynamic #end;
|
|
@:noCompletion private var __srcContext:#if (js && html5) CanvasRenderingContext2D #else Dynamic #end;
|
|
@:noCompletion private var __srcCustom:Dynamic;
|
|
@:noCompletion private var __srcImage:#if (js && html5) HTMLImage #else Dynamic #end;
|
|
@:noCompletion private var __srcImageData:#if (js && html5) ImageData #else Dynamic #end;
|
|
|
|
|
|
public function new (data:UInt8Array = null, width:Int = 0, height:Int = 0, bitsPerPixel:Int = 4) {
|
|
|
|
this.data = data;
|
|
this.width = width;
|
|
this.height = height;
|
|
this.bitsPerPixel = bitsPerPixel;
|
|
transparent = true;
|
|
|
|
}
|
|
|
|
|
|
public function clone ():ImageBuffer {
|
|
|
|
var buffer = new ImageBuffer (data, width, height, bitsPerPixel);
|
|
|
|
#if flash
|
|
if (__srcBitmapData != null) buffer.__srcBitmapData = __srcBitmapData.clone ();
|
|
#elseif (js && html5)
|
|
if (__srcImageData != null) {
|
|
|
|
buffer.__srcCanvas = cast Browser.document.createElement ("canvas");
|
|
buffer.__srcContext = cast buffer.__srcCanvas.getContext ("2d");
|
|
buffer.__srcCanvas.width = __srcImageData.width;
|
|
buffer.__srcCanvas.height = __srcImageData.height;
|
|
buffer.__srcImageData = buffer.__srcContext.createImageData (__srcImageData.width, __srcImageData.height);
|
|
var copy = new Uint8ClampedArray (__srcImageData.data);
|
|
buffer.__srcImageData.data.set (copy);
|
|
|
|
} else if (__srcCanvas != null) {
|
|
|
|
buffer.__srcCanvas = cast Browser.document.createElement ("canvas");
|
|
buffer.__srcContext = cast buffer.__srcCanvas.getContext ("2d");
|
|
buffer.__srcCanvas.width = __srcCanvas.width;
|
|
buffer.__srcCanvas.height = __srcCanvas.height;
|
|
buffer.__srcContext.drawImage (__srcCanvas, 0, 0);
|
|
|
|
} else {
|
|
|
|
buffer.__srcImage = __srcImage;
|
|
|
|
}
|
|
#else
|
|
if (data != null) {
|
|
|
|
buffer.data = new UInt8Array (data.byteLength);
|
|
var copy = new UInt8Array (data);
|
|
buffer.data.set (copy);
|
|
|
|
}
|
|
buffer.__srcCustom = __srcCustom;
|
|
#end
|
|
|
|
buffer.premultiplied = premultiplied;
|
|
buffer.transparent = transparent;
|
|
return buffer;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get & Set Methods
|
|
|
|
|
|
|
|
|
|
private function get_src ():Dynamic {
|
|
|
|
#if (js && html5)
|
|
|
|
if (__srcImage != null) return __srcImage;
|
|
return __srcCanvas;
|
|
|
|
#elseif flash
|
|
|
|
return __srcBitmapData;
|
|
|
|
#else
|
|
|
|
return __srcCustom;
|
|
|
|
#end
|
|
|
|
}
|
|
|
|
|
|
private function set_src (value:Dynamic):Dynamic {
|
|
|
|
#if (js && html5)
|
|
|
|
if (Std.is (value, HTMLImage)) {
|
|
|
|
__srcImage = cast value;
|
|
|
|
} else if (Std.is (value, CanvasElement)) {
|
|
|
|
__srcCanvas = cast value;
|
|
__srcContext = cast __srcCanvas.getContext ("2d");
|
|
|
|
}
|
|
|
|
#elseif flash
|
|
|
|
__srcBitmapData = cast value;
|
|
|
|
#else
|
|
|
|
__srcCustom = value;
|
|
|
|
#end
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
} |