Open Jeff94 opened 9 years ago
A better way is
public inline static function getRGBAPixels (bitmapData:BitmapData):ByteArray {
var rgbaData = new BitmapData( bitmapData.width, bitmapData.height, bitmapData.transparent );
var rect = new Rectangle( 0, 0, bitmapData.width, bitmapData.height );
var point = new Point( 0, 0 );
rgbaData.copyChannel( bitmapData, rect, point, BitmapDataChannel.GREEN, BitmapDataChannel.RED );
rgbaData.copyChannel( bitmapData, rect, point, BitmapDataChannel.BLUE, BitmapDataChannel.GREEN );
rgbaData.copyChannel( bitmapData, rect, point, BitmapDataChannel.ALPHA, BitmapDataChannel.BLUE );
rgbaData.copyChannel( bitmapData, rect, point, BitmapDataChannel.RED, BitmapDataChannel.ALPHA );
return rgbaData.getPixels( rect );
}
My pull request for this change got merged recently: https://github.com/openfl/openfl/pull/604
Hi all,
I have a performance problem to create a texture vs BitmapData size
Ex : "new BitmapTexture( new BitmapData( 2048, 2048, false ), false);"
Using 2048x2048 everything run perfectly under Flash but targeting Neko / Windows my software hang for a second .... decreasing BitmapData size reduce the issue ( at 128*128 everything fine on all target ) ...
Edit 1 : Seems the problem comes from BitmapData.getRGBAPixels ( ~ 900ms to process a 2048 x 2048 BitmapData )
Edit 2 : Temporary ( Ugly !! :-) ) workaround :
*** openfl._v2.display.BitmapData.hx public inline static function getRGBAPixels (bitmapData:BitmapData):ByteArray { var data = bitmapData.getPixels (new Rectangle (0, 0, bitmapData.width, bitmapData.height)); var size = bitmapData.width * bitmapData.height; var copy = new ByteArray(size-1); copy.writeBytes( data, 1, 0); return copy; }