Improve ImageBuffer.clone() (fixes openfl/openfl#533)
This commit is contained in:
@@ -153,7 +153,7 @@ class Image {
|
|||||||
public function clone ():Image {
|
public function clone ():Image {
|
||||||
|
|
||||||
#if (js && html5)
|
#if (js && html5)
|
||||||
ImageCanvasUtil.sync (this);
|
//ImageCanvasUtil.sync (this);
|
||||||
#end
|
#end
|
||||||
|
|
||||||
var image = new Image (buffer.clone (), offsetX, offsetY, width, height, null, type);
|
var image = new Image (buffer.clone (), offsetX, offsetY, width, height, null, type);
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import js.html.CanvasElement;
|
|||||||
import js.html.CanvasRenderingContext2D;
|
import js.html.CanvasRenderingContext2D;
|
||||||
import js.html.Image in HTMLImage;
|
import js.html.Image in HTMLImage;
|
||||||
import js.html.ImageData;
|
import js.html.ImageData;
|
||||||
|
import js.html.Uint8ClampedArray;
|
||||||
|
import js.Browser;
|
||||||
#elseif flash
|
#elseif flash
|
||||||
import flash.display.BitmapData;
|
import flash.display.BitmapData;
|
||||||
#end
|
#end
|
||||||
@@ -48,7 +50,44 @@ class ImageBuffer {
|
|||||||
public function clone ():ImageBuffer {
|
public function clone ():ImageBuffer {
|
||||||
|
|
||||||
var buffer = new ImageBuffer (data, width, height, bitsPerPixel);
|
var buffer = new ImageBuffer (data, width, height, bitsPerPixel);
|
||||||
buffer.src = src;
|
|
||||||
|
#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.premultiplied = premultiplied;
|
||||||
buffer.transparent = transparent;
|
buffer.transparent = transparent;
|
||||||
return buffer;
|
return buffer;
|
||||||
|
|||||||
Reference in New Issue
Block a user