diff --git a/tests/tests/swfs/avm1/bitmap_data_colortransform/Test.as b/tests/tests/swfs/avm1/bitmap_data_colortransform/Test.as new file mode 100644 index 000000000..a6b7cafbc --- /dev/null +++ b/tests/tests/swfs/avm1/bitmap_data_colortransform/Test.as @@ -0,0 +1,47 @@ +import flash.display.BitmapData; +import flash.geom.ColorTransform; + +addTestBitmap(0, 1, 1, 1, 1, 0, 0, 0, 0); +addTestBitmap(1, 2, 1, 1, 1, 0, 0, 0, 0); +addTestBitmap(2, 1, 2, 1, 1, 0, 0, 0, 0); +addTestBitmap(3, 1, 1, 2, 1, 0, 0, 0, 0); + +// Flash bug: Transform with only alpha multiplier > 1 has no effect! +addTestBitmap(4, 1, 1, 1, 2, 0, 0, 0, 0); + +// But if any other property is non-default, it does have an effect. +addTestBitmap(5, 2, 1, 1, 2, 0, 0, 0, 0); + +addTestBitmap(6, 0.5, 1, 1, 1, 0, 0, 0, 0); +addTestBitmap(7, 1, 0.5, 1, 1, 0, 0, 0, 0); +addTestBitmap(8, 1, 1, 0.5, 1, 0, 0, 0, 0); +addTestBitmap(9, 1, 1, 1, 0.5, 0, 0, 0, 0); +addTestBitmap(10, 1, 1, 1, 1, 50, 0, 0, 0); +addTestBitmap(11, 1, 1, 1, 1, 0, 50, 0, 0); +addTestBitmap(12, 1, 1, 1, 1, 0, 0, 50, 0); + +// Additive alpha should not affect pixels with 0 alpha. +addTestBitmap(13, 1, 1, 1, 1, 0, 0, 0, 50); + +addTestBitmap(14, 1, 1, 1, 1, -50, 0, 0, 0); +addTestBitmap(15, 1, 1, 1, 1, 0, -50, 0, 0); +addTestBitmap(16, 1, 1, 1, 1, 0, 0, -50, 0); +addTestBitmap(17, 1, 1, 1, 1, 0, 0, 0, -50); + +// Colors should saturate +addTestBitmap(18, 1, 1, 1, 1, 32764, -32764, 0, 0); + +// But intermediate calculations should have 16-bit precision, saturation only on final color +addTestBitmap(19, 127.99609375, 1, 1, 1, -16255, 0, 0, 0); + +addTestBitmap(20, 0.5, 1.3, 0.2, 0.9, 5, 33, -44, -12); + +function addTestBitmap(y:Number, rMult:Number, gMult:Number, bMult:Number, aMult:Number, rAdd:Number, gAdd:Number, bAdd:Number, aAdd:Number) +{ + var bData:BitmapData = BitmapData.loadBitmap("TestBitmapData"); + var ct:ColorTransform = new ColorTransform(rMult, gMult, bMult, aMult, rAdd, gAdd, bAdd, aAdd); + bData.colorTransform(bData.rectangle, ct); + var bitmap = createEmptyMovieClip("bitmap" + y, y); + bitmap.attachBitmap(bData, 0); + bitmap._y = y * 8; +} diff --git a/tests/tests/swfs/avm1/bitmap_data_colortransform/expected.png b/tests/tests/swfs/avm1/bitmap_data_colortransform/expected.png new file mode 100644 index 000000000..f8de7f327 Binary files /dev/null and b/tests/tests/swfs/avm1/bitmap_data_colortransform/expected.png differ diff --git a/tests/tests/swfs/avm1/bitmap_data_colortransform/output.txt b/tests/tests/swfs/avm1/bitmap_data_colortransform/output.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tests/tests/swfs/avm1/bitmap_data_colortransform/test.fla b/tests/tests/swfs/avm1/bitmap_data_colortransform/test.fla new file mode 100644 index 000000000..134d5c730 Binary files /dev/null and b/tests/tests/swfs/avm1/bitmap_data_colortransform/test.fla differ diff --git a/tests/tests/swfs/avm1/bitmap_data_colortransform/test.png b/tests/tests/swfs/avm1/bitmap_data_colortransform/test.png new file mode 100644 index 000000000..3f127ebaf Binary files /dev/null and b/tests/tests/swfs/avm1/bitmap_data_colortransform/test.png differ diff --git a/tests/tests/swfs/avm1/bitmap_data_colortransform/test.swf b/tests/tests/swfs/avm1/bitmap_data_colortransform/test.swf new file mode 100644 index 000000000..552c7aa0b Binary files /dev/null and b/tests/tests/swfs/avm1/bitmap_data_colortransform/test.swf differ diff --git a/tests/tests/swfs/avm1/bitmap_data_colortransform/test.toml b/tests/tests/swfs/avm1/bitmap_data_colortransform/test.toml new file mode 100644 index 000000000..ba0635e7d --- /dev/null +++ b/tests/tests/swfs/avm1/bitmap_data_colortransform/test.toml @@ -0,0 +1,7 @@ +num_frames = 1 + +[image_comparison] +tolerance = 5 + +[player_options] +with_renderer = { optional = true, sample_count = 1 } \ No newline at end of file diff --git a/tests/tests/swfs/avm2/bitmapdata_colortransform/Test.as b/tests/tests/swfs/avm2/bitmapdata_colortransform/Test.as new file mode 100644 index 000000000..61bd1546a --- /dev/null +++ b/tests/tests/swfs/avm2/bitmapdata_colortransform/Test.as @@ -0,0 +1,69 @@ +package +{ + import flash.display.Bitmap; + import flash.display.BitmapData; + import flash.display.Sprite; + import flash.geom.ColorTransform; + + import flash.display.PNGEncoderOptions; + import flash.net.FileReference; + import flash.utils.ByteArray; + + public class Test extends Sprite { + function Test() { + addTestBitmap(0, 1, 1, 1, 1, 0, 0, 0, 0); + addTestBitmap(1, 2, 1, 1, 1, 0, 0, 0, 0); + addTestBitmap(2, 1, 2, 1, 1, 0, 0, 0, 0); + addTestBitmap(3, 1, 1, 2, 1, 0, 0, 0, 0); + + // Flash bug: Transform with only alpha multiplier > 1 has no effect! + addTestBitmap(4, 1, 1, 1, 2, 0, 0, 0, 0); + + // But if any other property is non-default, it does have an effect. + addTestBitmap(5, 2, 1, 1, 2, 0, 0, 0, 0); + + addTestBitmap(6, 0.5, 1, 1, 1, 0, 0, 0, 0); + addTestBitmap(7, 1, 0.5, 1, 1, 0, 0, 0, 0); + addTestBitmap(8, 1, 1, 0.5, 1, 0, 0, 0, 0); + addTestBitmap(9, 1, 1, 1, 0.5, 0, 0, 0, 0); + addTestBitmap(10, 1, 1, 1, 1, 50, 0, 0, 0); + addTestBitmap(11, 1, 1, 1, 1, 0, 50, 0, 0); + addTestBitmap(12, 1, 1, 1, 1, 0, 0, 50, 0); + + // Additive alpha should not affect pixels with 0 alpha. + addTestBitmap(13, 1, 1, 1, 1, 0, 0, 0, 50); + + addTestBitmap(14, 1, 1, 1, 1, -50, 0, 0, 0); + addTestBitmap(15, 1, 1, 1, 1, 0, -50, 0, 0); + addTestBitmap(16, 1, 1, 1, 1, 0, 0, -50, 0); + addTestBitmap(17, 1, 1, 1, 1, 0, 0, 0, -50); + + // Colors should saturate + addTestBitmap(18, 1, 1, 1, 1, 32764, -32764, 0, 0); + + // But intermediate calculations should have 16-bit precision, saturation only on final color + addTestBitmap(19, 127.99609375, 1, 1, 1, -16255, 0, 0, 0); + + addTestBitmap(20, 0.5, 1.3, 0.2, 0.9, 5, 33, -44, -12); + + /* + var bData = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0xff000000); + bData.draw(stage); + var bytes = new ByteArray(); + bData.encode(bData.rect, new PNGEncoderOptions(), bytes); + var file = new FileReference(); + file.save(bytes, "expected2.png"); + */ + } + + function addTestBitmap(y:uint, rMult:Number, gMult:Number, bMult:Number, aMult:Number, rAdd:Number, gAdd:Number, bAdd:Number, aAdd:Number):void { + var bData:BitmapData = new TestBitmapData(256, 8); + var ct:ColorTransform = new ColorTransform(rMult, gMult, bMult, aMult, rAdd, gAdd, bAdd, aAdd); + bData.colorTransform(bData.rect, ct); + var bitmap:Bitmap = new Bitmap(bData); + addChild(bitmap); + bitmap.y = y * 8; + } + } +} + diff --git a/tests/tests/swfs/avm2/bitmapdata_colortransform/expected.png b/tests/tests/swfs/avm2/bitmapdata_colortransform/expected.png new file mode 100644 index 000000000..f8de7f327 Binary files /dev/null and b/tests/tests/swfs/avm2/bitmapdata_colortransform/expected.png differ diff --git a/tests/tests/swfs/avm2/bitmapdata_colortransform/output.txt b/tests/tests/swfs/avm2/bitmapdata_colortransform/output.txt new file mode 100644 index 000000000..e69de29bb diff --git a/tests/tests/swfs/avm2/bitmapdata_colortransform/test.fla b/tests/tests/swfs/avm2/bitmapdata_colortransform/test.fla new file mode 100644 index 000000000..19324a76f Binary files /dev/null and b/tests/tests/swfs/avm2/bitmapdata_colortransform/test.fla differ diff --git a/tests/tests/swfs/avm2/bitmapdata_colortransform/test.png b/tests/tests/swfs/avm2/bitmapdata_colortransform/test.png new file mode 100644 index 000000000..3f127ebaf Binary files /dev/null and b/tests/tests/swfs/avm2/bitmapdata_colortransform/test.png differ diff --git a/tests/tests/swfs/avm2/bitmapdata_colortransform/test.swf b/tests/tests/swfs/avm2/bitmapdata_colortransform/test.swf new file mode 100644 index 000000000..866054cbc Binary files /dev/null and b/tests/tests/swfs/avm2/bitmapdata_colortransform/test.swf differ diff --git a/tests/tests/swfs/avm2/bitmapdata_colortransform/test.toml b/tests/tests/swfs/avm2/bitmapdata_colortransform/test.toml new file mode 100644 index 000000000..ba0635e7d --- /dev/null +++ b/tests/tests/swfs/avm2/bitmapdata_colortransform/test.toml @@ -0,0 +1,7 @@ +num_frames = 1 + +[image_comparison] +tolerance = 5 + +[player_options] +with_renderer = { optional = true, sample_count = 1 } \ No newline at end of file