Improve ImageBuffer.clone() (fixes openfl/openfl#533)
This commit is contained in:
@@ -153,7 +153,7 @@ class Image {
|
||||
public function clone ():Image {
|
||||
|
||||
#if (js && html5)
|
||||
ImageCanvasUtil.sync (this);
|
||||
//ImageCanvasUtil.sync (this);
|
||||
#end
|
||||
|
||||
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.Image in HTMLImage;
|
||||
import js.html.ImageData;
|
||||
import js.html.Uint8ClampedArray;
|
||||
import js.Browser;
|
||||
#elseif flash
|
||||
import flash.display.BitmapData;
|
||||
#end
|
||||
@@ -48,7 +50,44 @@ class ImageBuffer {
|
||||
public function clone ():ImageBuffer {
|
||||
|
||||
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.transparent = transparent;
|
||||
return buffer;
|
||||
|
||||
Reference in New Issue
Block a user