diff --git a/core/src/avm1/globals/bitmap_data.rs b/core/src/avm1/globals/bitmap_data.rs index e2c7605cd..af42cf797 100644 --- a/core/src/avm1/globals/bitmap_data.rs +++ b/core/src/avm1/globals/bitmap_data.rs @@ -1128,12 +1128,75 @@ pub fn palette_map<'gc>( pub fn pixel_dissolve<'gc>( activation: &mut Activation<'_, 'gc>, this: Object<'gc>, - _args: &[Value<'gc>], + args: &[Value<'gc>], ) -> Result, Error<'gc>> { if let Some(bitmap_data) = this.as_bitmap_data_object() { if !bitmap_data.disposed() { - avm1_stub!(activation, "BitmapData", "pixelDissolve"); - return Ok(Value::Undefined); + let src_bitmap_data = args + .get(0) + .unwrap_or(&Value::Undefined) + .coerce_to_object(activation); + + let source_rect = args + .get(1) + .unwrap_or(&Value::Undefined) + .coerce_to_object(activation); + let (src_min_x, src_min_y, src_width, src_height) = + if let (Some(x), Some(y), Some(width), Some(height)) = ( + source_rect.get_local_stored("x", activation), + source_rect.get_local_stored("y", activation), + source_rect.get_local_stored("width", activation), + source_rect.get_local_stored("height", activation), + ) { + ( + x.coerce_to_f64(activation)? as i32, + y.coerce_to_f64(activation)? as i32, + width.coerce_to_f64(activation)? as i32, + height.coerce_to_f64(activation)? as i32, + ) + } else { + // Invalid `sourceRect`. + return Ok((-4).into()); + }; + + if let Some(src_bitmap_data) = src_bitmap_data.as_bitmap_data_object() { + if !src_bitmap_data.disposed() { + let dest_point = args + .get(2) + .unwrap_or(&Value::Undefined) + .coerce_to_object(activation); + let dest_x = dest_point.get("x", activation)?.coerce_to_f64(activation)? as i32; + let dest_y = dest_point.get("y", activation)?.coerce_to_f64(activation)? as i32; + let dest_point = (dest_x, dest_y); + + let random_seed = match args.get(3) { + Some(random_seed) => random_seed.coerce_to_i32(activation)?, + None => 0, + }; + + let num_pixels = match args.get(4) { + Some(num_pixels) => num_pixels.coerce_to_i32(activation)?, + None => return Ok(0.into()), + }; + + let fill_color = match args.get(5) { + Some(fill_color) => fill_color.coerce_to_i32(activation)?, + None => 0, + }; + + return Ok(operations::pixel_dissolve( + activation.context.gc_context, + bitmap_data.bitmap_data(), + src_bitmap_data.bitmap_data(), + (src_min_x, src_min_y, src_width, src_height), + dest_point, + random_seed, + num_pixels, + fill_color, + ) + .into()); + } + } } } diff --git a/core/src/bitmap/operations.rs b/core/src/bitmap/operations.rs index bb0a97f83..86eb82ac9 100644 --- a/core/src/bitmap/operations.rs +++ b/core/src/bitmap/operations.rs @@ -1690,18 +1690,10 @@ pub fn pixel_dissolve<'gc>( num_pixels: i32, fill_color: i32, ) -> i32 { - // TODO: What should happen in AVM1 when `num_pixels` is negative? - // Apparently, // "numPixels:int (default = 0) — The default is 1/30 of the source area (width x height). " // is wrong. - // TODO: Ensure that the AVM1 version returns -1 (probably in the AVM1 interface layer) - // when: - // "Calls to any method or property of a BitmapData object fail if the BitmapData object is - // invalid (for example, if it has height == 0 and width == 0), - // and upon failing those properties and methods that return Number values return -1. ". - // Extract points and areas. let (src_min_x, src_min_y, src_width, src_height) = src_rect; diff --git a/tests/tests/swfs/avm1/bitmap_data_pixeldissolve/output.txt b/tests/tests/swfs/avm1/bitmap_data_pixeldissolve/output.txt new file mode 100644 index 000000000..d7814403c --- /dev/null +++ b/tests/tests/swfs/avm1/bitmap_data_pixeldissolve/output.txt @@ -0,0 +1,1075 @@ +------------------------------------------ +Basic test. + +Dissolving for 100 rounds, with data: width: 10, height: 10, sourceRect: [own], destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 22 +(22) Overwritten pixel count: 23 +(23) Overwritten pixel count: 24 +(24) Overwritten pixel count: 25 +(25) Overwritten pixel count: 26 +(26) Overwritten pixel count: 27 +(27) Overwritten pixel count: 28 +(28) Overwritten pixel count: 29 +(29) Overwritten pixel count: 30 +(30) Overwritten pixel count: 31 +(31) Overwritten pixel count: 32 +(32) Overwritten pixel count: 33 +(33) Overwritten pixel count: 34 +(34) Overwritten pixel count: 35 +(35) Overwritten pixel count: 36 +(36) Overwritten pixel count: 37 +(37) Overwritten pixel count: 38 +(38) Overwritten pixel count: 39 +(39) Overwritten pixel count: 40 +(40) Overwritten pixel count: 41 +(41) Overwritten pixel count: 42 +(42) Overwritten pixel count: 43 +(43) Overwritten pixel count: 44 +(44) Overwritten pixel count: 45 +(45) Overwritten pixel count: 46 +(46) Overwritten pixel count: 47 +(47) Overwritten pixel count: 48 +(48) Overwritten pixel count: 49 +(49) Overwritten pixel count: 50 +(50) Overwritten pixel count: 51 +(51) Overwritten pixel count: 52 +(52) Overwritten pixel count: 53 +(53) Overwritten pixel count: 54 +(54) Overwritten pixel count: 55 +(55) Overwritten pixel count: 56 +(56) Overwritten pixel count: 57 +(57) Overwritten pixel count: 58 +(58) Overwritten pixel count: 59 +(59) Overwritten pixel count: 60 +(60) Overwritten pixel count: 61 +(61) Overwritten pixel count: 62 +(62) Overwritten pixel count: 63 +(63) Overwritten pixel count: 64 +(64) Overwritten pixel count: 65 +(65) Overwritten pixel count: 66 +(66) Overwritten pixel count: 67 +(67) Overwritten pixel count: 68 +(68) Overwritten pixel count: 69 +(69) Overwritten pixel count: 70 +(70) Overwritten pixel count: 71 +(71) Overwritten pixel count: 72 +(72) Overwritten pixel count: 73 +(73) Overwritten pixel count: 74 +(74) Overwritten pixel count: 75 +(75) Overwritten pixel count: 76 +(76) Overwritten pixel count: 77 +(77) Overwritten pixel count: 78 +(78) Overwritten pixel count: 79 +(79) Overwritten pixel count: 80 +(80) Overwritten pixel count: 81 +(81) Overwritten pixel count: 82 +(82) Overwritten pixel count: 83 +(83) Overwritten pixel count: 84 +(84) Overwritten pixel count: 85 +(85) Overwritten pixel count: 86 +(86) Overwritten pixel count: 87 +(87) Overwritten pixel count: 88 +(88) Overwritten pixel count: 89 +(89) Overwritten pixel count: 90 +(90) Overwritten pixel count: 91 +(91) Overwritten pixel count: 92 +(92) Overwritten pixel count: 93 +(93) Overwritten pixel count: 94 +(94) Overwritten pixel count: 95 +(95) Overwritten pixel count: 96 +(96) Overwritten pixel count: 97 +(97) Overwritten pixel count: 98 +(98) Overwritten pixel count: 99 +(99) Overwritten pixel count: 100 +(100) Overwritten pixel count: 100 + + + +------------------------------------------ +`numPixels`. + +Dissolving for 4 rounds, with data: width: 10, height: 10, sourceRect: [own], destPoint: (x=0, y=0), numPixels: 0 +(1) Overwritten pixel count: 1 +(2) Overwritten pixel count: 1 +(3) Overwritten pixel count: 1 +(4) Overwritten pixel count: 1 + +Dissolving for 35 rounds, with data: width: 10, height: 10, sourceRect: [own], destPoint: (x=0, y=0), numPixels: 3 +(1) Overwritten pixel count: 4 +(2) Overwritten pixel count: 7 +(3) Overwritten pixel count: 10 +(4) Overwritten pixel count: 13 +(5) Overwritten pixel count: 16 +(6) Overwritten pixel count: 19 +(7) Overwritten pixel count: 22 +(8) Overwritten pixel count: 25 +(9) Overwritten pixel count: 28 +(10) Overwritten pixel count: 31 +(11) Overwritten pixel count: 34 +(12) Overwritten pixel count: 37 +(13) Overwritten pixel count: 40 +(14) Overwritten pixel count: 43 +(15) Overwritten pixel count: 46 +(16) Overwritten pixel count: 49 +(17) Overwritten pixel count: 52 +(18) Overwritten pixel count: 55 +(19) Overwritten pixel count: 58 +(20) Overwritten pixel count: 61 +(21) Overwritten pixel count: 64 +(22) Overwritten pixel count: 67 +(23) Overwritten pixel count: 70 +(24) Overwritten pixel count: 73 +(25) Overwritten pixel count: 76 +(26) Overwritten pixel count: 79 +(27) Overwritten pixel count: 82 +(28) Overwritten pixel count: 85 +(29) Overwritten pixel count: 88 +(30) Overwritten pixel count: 91 +(31) Overwritten pixel count: 94 +(32) Overwritten pixel count: 97 +(33) Overwritten pixel count: 100 +(34) Overwritten pixel count: 100 +(35) Overwritten pixel count: 100 + + + +------------------------------------------ +Dimensions. + +Dissolving for 61 rounds, with data: width: 150, height: 2, sourceRect: [own], destPoint: (x=0, y=0), numPixels: 5 +(1) Overwritten pixel count: 6 +(2) Overwritten pixel count: 11 +(3) Overwritten pixel count: 16 +(4) Overwritten pixel count: 21 +(5) Overwritten pixel count: 26 +(6) Overwritten pixel count: 31 +(7) Overwritten pixel count: 36 +(8) Overwritten pixel count: 41 +(9) Overwritten pixel count: 46 +(10) Overwritten pixel count: 51 +(11) Overwritten pixel count: 56 +(12) Overwritten pixel count: 61 +(13) Overwritten pixel count: 66 +(14) Overwritten pixel count: 71 +(15) Overwritten pixel count: 76 +(16) Overwritten pixel count: 81 +(17) Overwritten pixel count: 86 +(18) Overwritten pixel count: 91 +(19) Overwritten pixel count: 96 +(20) Overwritten pixel count: 101 +(21) Overwritten pixel count: 106 +(22) Overwritten pixel count: 111 +(23) Overwritten pixel count: 116 +(24) Overwritten pixel count: 121 +(25) Overwritten pixel count: 126 +(26) Overwritten pixel count: 131 +(27) Overwritten pixel count: 136 +(28) Overwritten pixel count: 141 +(29) Overwritten pixel count: 146 +(30) Overwritten pixel count: 151 +(31) Overwritten pixel count: 156 +(32) Overwritten pixel count: 161 +(33) Overwritten pixel count: 166 +(34) Overwritten pixel count: 171 +(35) Overwritten pixel count: 176 +(36) Overwritten pixel count: 181 +(37) Overwritten pixel count: 186 +(38) Overwritten pixel count: 191 +(39) Overwritten pixel count: 196 +(40) Overwritten pixel count: 201 +(41) Overwritten pixel count: 206 +(42) Overwritten pixel count: 211 +(43) Overwritten pixel count: 216 +(44) Overwritten pixel count: 221 +(45) Overwritten pixel count: 226 +(46) Overwritten pixel count: 231 +(47) Overwritten pixel count: 236 +(48) Overwritten pixel count: 241 +(49) Overwritten pixel count: 246 +(50) Overwritten pixel count: 251 +(51) Overwritten pixel count: 256 +(52) Overwritten pixel count: 261 +(53) Overwritten pixel count: 266 +(54) Overwritten pixel count: 271 +(55) Overwritten pixel count: 276 +(56) Overwritten pixel count: 281 +(57) Overwritten pixel count: 286 +(58) Overwritten pixel count: 291 +(59) Overwritten pixel count: 296 +(60) Overwritten pixel count: 300 +(61) Overwritten pixel count: 300 + +Dissolving for 61 rounds, with data: width: 2, height: 150, sourceRect: [own], destPoint: (x=0, y=0), numPixels: 5 +(1) Overwritten pixel count: 6 +(2) Overwritten pixel count: 11 +(3) Overwritten pixel count: 16 +(4) Overwritten pixel count: 21 +(5) Overwritten pixel count: 26 +(6) Overwritten pixel count: 31 +(7) Overwritten pixel count: 36 +(8) Overwritten pixel count: 41 +(9) Overwritten pixel count: 46 +(10) Overwritten pixel count: 51 +(11) Overwritten pixel count: 56 +(12) Overwritten pixel count: 61 +(13) Overwritten pixel count: 66 +(14) Overwritten pixel count: 71 +(15) Overwritten pixel count: 76 +(16) Overwritten pixel count: 81 +(17) Overwritten pixel count: 86 +(18) Overwritten pixel count: 91 +(19) Overwritten pixel count: 96 +(20) Overwritten pixel count: 101 +(21) Overwritten pixel count: 106 +(22) Overwritten pixel count: 111 +(23) Overwritten pixel count: 116 +(24) Overwritten pixel count: 121 +(25) Overwritten pixel count: 126 +(26) Overwritten pixel count: 131 +(27) Overwritten pixel count: 136 +(28) Overwritten pixel count: 141 +(29) Overwritten pixel count: 146 +(30) Overwritten pixel count: 151 +(31) Overwritten pixel count: 156 +(32) Overwritten pixel count: 161 +(33) Overwritten pixel count: 166 +(34) Overwritten pixel count: 171 +(35) Overwritten pixel count: 176 +(36) Overwritten pixel count: 181 +(37) Overwritten pixel count: 186 +(38) Overwritten pixel count: 191 +(39) Overwritten pixel count: 196 +(40) Overwritten pixel count: 201 +(41) Overwritten pixel count: 206 +(42) Overwritten pixel count: 211 +(43) Overwritten pixel count: 216 +(44) Overwritten pixel count: 221 +(45) Overwritten pixel count: 226 +(46) Overwritten pixel count: 231 +(47) Overwritten pixel count: 236 +(48) Overwritten pixel count: 241 +(49) Overwritten pixel count: 246 +(50) Overwritten pixel count: 251 +(51) Overwritten pixel count: 256 +(52) Overwritten pixel count: 261 +(53) Overwritten pixel count: 266 +(54) Overwritten pixel count: 271 +(55) Overwritten pixel count: 276 +(56) Overwritten pixel count: 281 +(57) Overwritten pixel count: 286 +(58) Overwritten pixel count: 291 +(59) Overwritten pixel count: 296 +(60) Overwritten pixel count: 300 +(61) Overwritten pixel count: 300 + +Dissolving for 66 rounds, with data: width: 8, height: 8, sourceRect: [own], destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 22 +(22) Overwritten pixel count: 23 +(23) Overwritten pixel count: 24 +(24) Overwritten pixel count: 25 +(25) Overwritten pixel count: 26 +(26) Overwritten pixel count: 27 +(27) Overwritten pixel count: 28 +(28) Overwritten pixel count: 29 +(29) Overwritten pixel count: 30 +(30) Overwritten pixel count: 31 +(31) Overwritten pixel count: 32 +(32) Overwritten pixel count: 33 +(33) Overwritten pixel count: 34 +(34) Overwritten pixel count: 35 +(35) Overwritten pixel count: 36 +(36) Overwritten pixel count: 37 +(37) Overwritten pixel count: 38 +(38) Overwritten pixel count: 39 +(39) Overwritten pixel count: 40 +(40) Overwritten pixel count: 41 +(41) Overwritten pixel count: 42 +(42) Overwritten pixel count: 43 +(43) Overwritten pixel count: 44 +(44) Overwritten pixel count: 45 +(45) Overwritten pixel count: 46 +(46) Overwritten pixel count: 47 +(47) Overwritten pixel count: 48 +(48) Overwritten pixel count: 49 +(49) Overwritten pixel count: 50 +(50) Overwritten pixel count: 51 +(51) Overwritten pixel count: 52 +(52) Overwritten pixel count: 53 +(53) Overwritten pixel count: 54 +(54) Overwritten pixel count: 55 +(55) Overwritten pixel count: 56 +(56) Overwritten pixel count: 57 +(57) Overwritten pixel count: 58 +(58) Overwritten pixel count: 59 +(59) Overwritten pixel count: 60 +(60) Overwritten pixel count: 61 +(61) Overwritten pixel count: 62 +(62) Overwritten pixel count: 63 +(63) Overwritten pixel count: 64 +(64) Overwritten pixel count: 64 +(65) Overwritten pixel count: 64 +(66) Overwritten pixel count: 64 + +Dissolving for 66 rounds, with data: width: 7, height: 9, sourceRect: [own], destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 22 +(22) Overwritten pixel count: 23 +(23) Overwritten pixel count: 24 +(24) Overwritten pixel count: 25 +(25) Overwritten pixel count: 26 +(26) Overwritten pixel count: 27 +(27) Overwritten pixel count: 28 +(28) Overwritten pixel count: 29 +(29) Overwritten pixel count: 30 +(30) Overwritten pixel count: 31 +(31) Overwritten pixel count: 32 +(32) Overwritten pixel count: 33 +(33) Overwritten pixel count: 34 +(34) Overwritten pixel count: 35 +(35) Overwritten pixel count: 36 +(36) Overwritten pixel count: 37 +(37) Overwritten pixel count: 38 +(38) Overwritten pixel count: 39 +(39) Overwritten pixel count: 40 +(40) Overwritten pixel count: 41 +(41) Overwritten pixel count: 42 +(42) Overwritten pixel count: 43 +(43) Overwritten pixel count: 44 +(44) Overwritten pixel count: 45 +(45) Overwritten pixel count: 46 +(46) Overwritten pixel count: 47 +(47) Overwritten pixel count: 48 +(48) Overwritten pixel count: 49 +(49) Overwritten pixel count: 50 +(50) Overwritten pixel count: 51 +(51) Overwritten pixel count: 52 +(52) Overwritten pixel count: 53 +(53) Overwritten pixel count: 54 +(54) Overwritten pixel count: 55 +(55) Overwritten pixel count: 56 +(56) Overwritten pixel count: 57 +(57) Overwritten pixel count: 58 +(58) Overwritten pixel count: 59 +(59) Overwritten pixel count: 60 +(60) Overwritten pixel count: 61 +(61) Overwritten pixel count: 62 +(62) Overwritten pixel count: 63 +(63) Overwritten pixel count: 63 +(64) Overwritten pixel count: 63 +(65) Overwritten pixel count: 63 +(66) Overwritten pixel count: 63 + +Dissolving for 66 rounds, with data: width: 5, height: 13, sourceRect: [own], destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 22 +(22) Overwritten pixel count: 23 +(23) Overwritten pixel count: 24 +(24) Overwritten pixel count: 25 +(25) Overwritten pixel count: 26 +(26) Overwritten pixel count: 27 +(27) Overwritten pixel count: 28 +(28) Overwritten pixel count: 29 +(29) Overwritten pixel count: 30 +(30) Overwritten pixel count: 31 +(31) Overwritten pixel count: 32 +(32) Overwritten pixel count: 33 +(33) Overwritten pixel count: 34 +(34) Overwritten pixel count: 35 +(35) Overwritten pixel count: 36 +(36) Overwritten pixel count: 37 +(37) Overwritten pixel count: 38 +(38) Overwritten pixel count: 39 +(39) Overwritten pixel count: 40 +(40) Overwritten pixel count: 41 +(41) Overwritten pixel count: 42 +(42) Overwritten pixel count: 43 +(43) Overwritten pixel count: 44 +(44) Overwritten pixel count: 45 +(45) Overwritten pixel count: 46 +(46) Overwritten pixel count: 47 +(47) Overwritten pixel count: 48 +(48) Overwritten pixel count: 49 +(49) Overwritten pixel count: 50 +(50) Overwritten pixel count: 51 +(51) Overwritten pixel count: 52 +(52) Overwritten pixel count: 53 +(53) Overwritten pixel count: 54 +(54) Overwritten pixel count: 55 +(55) Overwritten pixel count: 56 +(56) Overwritten pixel count: 57 +(57) Overwritten pixel count: 58 +(58) Overwritten pixel count: 59 +(59) Overwritten pixel count: 60 +(60) Overwritten pixel count: 61 +(61) Overwritten pixel count: 62 +(62) Overwritten pixel count: 63 +(63) Overwritten pixel count: 64 +(64) Overwritten pixel count: 65 +(65) Overwritten pixel count: 65 +(66) Overwritten pixel count: 65 + + + +------------------------------------------ +`sourceRect`. + +Dissolving for 101 rounds, with data: width: 10, height: 10, sourceRect: (x=0, y=0, w=10, h=10), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 22 +(22) Overwritten pixel count: 23 +(23) Overwritten pixel count: 24 +(24) Overwritten pixel count: 25 +(25) Overwritten pixel count: 26 +(26) Overwritten pixel count: 27 +(27) Overwritten pixel count: 28 +(28) Overwritten pixel count: 29 +(29) Overwritten pixel count: 30 +(30) Overwritten pixel count: 31 +(31) Overwritten pixel count: 32 +(32) Overwritten pixel count: 33 +(33) Overwritten pixel count: 34 +(34) Overwritten pixel count: 35 +(35) Overwritten pixel count: 36 +(36) Overwritten pixel count: 37 +(37) Overwritten pixel count: 38 +(38) Overwritten pixel count: 39 +(39) Overwritten pixel count: 40 +(40) Overwritten pixel count: 41 +(41) Overwritten pixel count: 42 +(42) Overwritten pixel count: 43 +(43) Overwritten pixel count: 44 +(44) Overwritten pixel count: 45 +(45) Overwritten pixel count: 46 +(46) Overwritten pixel count: 47 +(47) Overwritten pixel count: 48 +(48) Overwritten pixel count: 49 +(49) Overwritten pixel count: 50 +(50) Overwritten pixel count: 51 +(51) Overwritten pixel count: 52 +(52) Overwritten pixel count: 53 +(53) Overwritten pixel count: 54 +(54) Overwritten pixel count: 55 +(55) Overwritten pixel count: 56 +(56) Overwritten pixel count: 57 +(57) Overwritten pixel count: 58 +(58) Overwritten pixel count: 59 +(59) Overwritten pixel count: 60 +(60) Overwritten pixel count: 61 +(61) Overwritten pixel count: 62 +(62) Overwritten pixel count: 63 +(63) Overwritten pixel count: 64 +(64) Overwritten pixel count: 65 +(65) Overwritten pixel count: 66 +(66) Overwritten pixel count: 67 +(67) Overwritten pixel count: 68 +(68) Overwritten pixel count: 69 +(69) Overwritten pixel count: 70 +(70) Overwritten pixel count: 71 +(71) Overwritten pixel count: 72 +(72) Overwritten pixel count: 73 +(73) Overwritten pixel count: 74 +(74) Overwritten pixel count: 75 +(75) Overwritten pixel count: 76 +(76) Overwritten pixel count: 77 +(77) Overwritten pixel count: 78 +(78) Overwritten pixel count: 79 +(79) Overwritten pixel count: 80 +(80) Overwritten pixel count: 81 +(81) Overwritten pixel count: 82 +(82) Overwritten pixel count: 83 +(83) Overwritten pixel count: 84 +(84) Overwritten pixel count: 85 +(85) Overwritten pixel count: 86 +(86) Overwritten pixel count: 87 +(87) Overwritten pixel count: 88 +(88) Overwritten pixel count: 89 +(89) Overwritten pixel count: 90 +(90) Overwritten pixel count: 91 +(91) Overwritten pixel count: 92 +(92) Overwritten pixel count: 93 +(93) Overwritten pixel count: 94 +(94) Overwritten pixel count: 95 +(95) Overwritten pixel count: 96 +(96) Overwritten pixel count: 97 +(97) Overwritten pixel count: 98 +(98) Overwritten pixel count: 99 +(99) Overwritten pixel count: 100 +(100) Overwritten pixel count: 100 +(101) Overwritten pixel count: 100 + +Dissolving for 20 rounds, with data: width: 10, height: 10, sourceRect: (x=0, y=0, w=4, h=4), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 16 +(17) Overwritten pixel count: 16 +(18) Overwritten pixel count: 16 +(19) Overwritten pixel count: 16 +(20) Overwritten pixel count: 16 + +Dissolving for 35 rounds, with data: width: 10, height: 10, sourceRect: (x=0, y=0, w=8, h=4), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 22 +(22) Overwritten pixel count: 23 +(23) Overwritten pixel count: 24 +(24) Overwritten pixel count: 25 +(25) Overwritten pixel count: 26 +(26) Overwritten pixel count: 27 +(27) Overwritten pixel count: 28 +(28) Overwritten pixel count: 29 +(29) Overwritten pixel count: 30 +(30) Overwritten pixel count: 31 +(31) Overwritten pixel count: 32 +(32) Overwritten pixel count: 32 +(33) Overwritten pixel count: 32 +(34) Overwritten pixel count: 32 +(35) Overwritten pixel count: 32 + +Dissolving for 35 rounds, with data: width: 10, height: 10, sourceRect: (x=0, y=0, w=4, h=8), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 22 +(22) Overwritten pixel count: 23 +(23) Overwritten pixel count: 24 +(24) Overwritten pixel count: 25 +(25) Overwritten pixel count: 26 +(26) Overwritten pixel count: 27 +(27) Overwritten pixel count: 28 +(28) Overwritten pixel count: 29 +(29) Overwritten pixel count: 30 +(30) Overwritten pixel count: 31 +(31) Overwritten pixel count: 32 +(32) Overwritten pixel count: 32 +(33) Overwritten pixel count: 32 +(34) Overwritten pixel count: 32 +(35) Overwritten pixel count: 32 + +Dissolving for 27 rounds, with data: width: 10, height: 10, sourceRect: (x=0, y=0, w=3, h=8), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 22 +(22) Overwritten pixel count: 23 +(23) Overwritten pixel count: 24 +(24) Overwritten pixel count: 24 +(25) Overwritten pixel count: 24 +(26) Overwritten pixel count: 24 +(27) Overwritten pixel count: 24 + +Dissolving for 31 rounds, with data: width: 10, height: 10, sourceRect: (x=0, y=0, w=4, h=7), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 22 +(22) Overwritten pixel count: 23 +(23) Overwritten pixel count: 24 +(24) Overwritten pixel count: 25 +(25) Overwritten pixel count: 26 +(26) Overwritten pixel count: 27 +(27) Overwritten pixel count: 28 +(28) Overwritten pixel count: 28 +(29) Overwritten pixel count: 28 +(30) Overwritten pixel count: 28 +(31) Overwritten pixel count: 28 + +Dissolving for 24 rounds, with data: width: 10, height: 10, sourceRect: (x=0, y=0, w=3, h=7), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 21 +(22) Overwritten pixel count: 21 +(23) Overwritten pixel count: 21 +(24) Overwritten pixel count: 21 + +Dissolving for 30 rounds, with data: width: 10, height: 10, sourceRect: (x=1, y=3, w=4, h=8), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 22 +(22) Overwritten pixel count: 23 +(23) Overwritten pixel count: 24 +(24) Overwritten pixel count: 25 +(25) Overwritten pixel count: 26 +(26) Overwritten pixel count: 27 +(27) Overwritten pixel count: 28 +(28) Overwritten pixel count: 28 +(29) Overwritten pixel count: 28 +(30) Overwritten pixel count: 28 + +Dissolving for 4 rounds, with data: width: 10, height: 10, sourceRect: (x=14, y=3, w=4, h=8), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 0 +(2) Overwritten pixel count: 0 +(3) Overwritten pixel count: 0 +(4) Overwritten pixel count: 0 + +Dissolving for 4 rounds, with data: width: 10, height: 10, sourceRect: (x=3, y=14, w=4, h=8), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 0 +(2) Overwritten pixel count: 0 +(3) Overwritten pixel count: 0 +(4) Overwritten pixel count: 0 + +Dissolving for 25 rounds, with data: width: 10, height: 10, sourceRect: (x=-1, y=3, w=4, h=8), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 21 +(22) Overwritten pixel count: 21 +(23) Overwritten pixel count: 21 +(24) Overwritten pixel count: 21 +(25) Overwritten pixel count: 21 + +Dissolving for 25 rounds, with data: width: 10, height: 10, sourceRect: (x=-1, y=-1, w=4, h=8), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 21 +(22) Overwritten pixel count: 21 +(23) Overwritten pixel count: 21 +(24) Overwritten pixel count: 21 +(25) Overwritten pixel count: 21 + +Dissolving for 30 rounds, with data: width: 10, height: 10, sourceRect: (x=2, y=-1, w=4, h=8), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 19 +(19) Overwritten pixel count: 20 +(20) Overwritten pixel count: 21 +(21) Overwritten pixel count: 22 +(22) Overwritten pixel count: 23 +(23) Overwritten pixel count: 24 +(24) Overwritten pixel count: 25 +(25) Overwritten pixel count: 26 +(26) Overwritten pixel count: 27 +(27) Overwritten pixel count: 28 +(28) Overwritten pixel count: 28 +(29) Overwritten pixel count: 28 +(30) Overwritten pixel count: 28 + +Dissolving for 2 rounds, with data: width: 10, height: 10, sourceRect: (x=1, y=2, w=-1, h=-3), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 0 +(2) Overwritten pixel count: 0 + +Dissolving for 2 rounds, with data: width: 10, height: 10, sourceRect: (x=1, y=2, w=-1, h=3), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 0 +(2) Overwritten pixel count: 0 + +Dissolving for 2 rounds, with data: width: 10, height: 10, sourceRect: (x=1, y=2, w=1, h=-3), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 0 +(2) Overwritten pixel count: 0 + +Dissolving for 2 rounds, with data: width: 10, height: 10, sourceRect: (x=1, y=2, w=0, h=1), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 0 +(2) Overwritten pixel count: 0 + +Dissolving for 2 rounds, with data: width: 10, height: 10, sourceRect: (x=1, y=2, w=1, h=0), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 0 +(2) Overwritten pixel count: 0 + +Dissolving for 2 rounds, with data: width: 10, height: 10, sourceRect: (x=1, y=2, w=0, h=0), destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 0 +(2) Overwritten pixel count: 0 + +Dissolving for 20 rounds, with data: width: 10, height: 10, sourceRect: null, destPoint: (x=0, y=0), numPixels: 1 +(1) Overwritten pixel count: 0 +Result: -4 +(2) Overwritten pixel count: 0 +Result: -4 +(3) Overwritten pixel count: 0 +Result: -4 +(4) Overwritten pixel count: 0 +Result: -4 +(5) Overwritten pixel count: 0 +Result: -4 +(6) Overwritten pixel count: 0 +Result: -4 +(7) Overwritten pixel count: 0 +Result: -4 +(8) Overwritten pixel count: 0 +Result: -4 +(9) Overwritten pixel count: 0 +Result: -4 +(10) Overwritten pixel count: 0 +Result: -4 +(11) Overwritten pixel count: 0 +Result: -4 +(12) Overwritten pixel count: 0 +Result: -4 +(13) Overwritten pixel count: 0 +Result: -4 +(14) Overwritten pixel count: 0 +Result: -4 +(15) Overwritten pixel count: 0 +Result: -4 +(16) Overwritten pixel count: 0 +Result: -4 +(17) Overwritten pixel count: 0 +Result: -4 +(18) Overwritten pixel count: 0 +Result: -4 +(19) Overwritten pixel count: 0 +Result: -4 +(20) Overwritten pixel count: 0 +Result: -4 + + + +------------------------------------------ +`destPoint`. + +Dissolving for 18 rounds, with data: width: 10, height: 10, sourceRect: (x=0, y=0, w=3, h=7), destPoint: (x=3, y=5), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 15 +(16) Overwritten pixel count: 15 +(17) Overwritten pixel count: 15 +(18) Overwritten pixel count: 15 + +Dissolving for 15 rounds, with data: width: 10, height: 10, sourceRect: (x=0, y=0, w=3, h=7), destPoint: (x=-1, y=-1), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 12 +(13) Overwritten pixel count: 12 +(14) Overwritten pixel count: 12 +(15) Overwritten pixel count: 12 + +Dissolving for 3 rounds, with data: width: 10, height: 10, sourceRect: (x=0, y=0, w=3, h=7), destPoint: (x=-10, y=-10), numPixels: 1 +(1) Overwritten pixel count: 0 +(2) Overwritten pixel count: 0 +(3) Overwritten pixel count: 0 + +Dissolving for 3 rounds, with data: width: 10, height: 10, sourceRect: (x=0, y=0, w=3, h=7), destPoint: (x=-2, y=10), numPixels: 1 +(1) Overwritten pixel count: 0 +(2) Overwritten pixel count: 0 +(3) Overwritten pixel count: 0 + +Dissolving for 21 rounds, with data: width: 10, height: 10, sourceRect: (x=0, y=0, w=3, h=7), destPoint: (x=5, y=4), numPixels: 1 +(1) Overwritten pixel count: 2 +(2) Overwritten pixel count: 3 +(3) Overwritten pixel count: 4 +(4) Overwritten pixel count: 5 +(5) Overwritten pixel count: 6 +(6) Overwritten pixel count: 7 +(7) Overwritten pixel count: 8 +(8) Overwritten pixel count: 9 +(9) Overwritten pixel count: 10 +(10) Overwritten pixel count: 11 +(11) Overwritten pixel count: 12 +(12) Overwritten pixel count: 13 +(13) Overwritten pixel count: 14 +(14) Overwritten pixel count: 15 +(15) Overwritten pixel count: 16 +(16) Overwritten pixel count: 17 +(17) Overwritten pixel count: 18 +(18) Overwritten pixel count: 18 +(19) Overwritten pixel count: 18 +(20) Overwritten pixel count: 18 +(21) Overwritten pixel count: 18 + + + +------------------------------------------ +Default parameters. + +(0) Overwritten pixel count: 0 + + +------------------------------------------ +`null` `sourceBitmapData`. + +Result: -1 + + +------------------------------------------ +Wrong type for `sourceBitmapData`. + +Result: -1 + + +------------------------------------------ +Invalid other bitmap. + +Result: -1 diff --git a/tests/tests/swfs/avm1/bitmap_data_pixeldissolve/test.as b/tests/tests/swfs/avm1/bitmap_data_pixeldissolve/test.as new file mode 100644 index 000000000..6e32e57d7 --- /dev/null +++ b/tests/tests/swfs/avm1/bitmap_data_pixeldissolve/test.as @@ -0,0 +1,264 @@ + +import flash.display.BitmapData; +import flash.geom.Point; +import flash.geom.Rectangle; +import flash.utils.Timer; +import flash.events.TimerEvent; + +class test { + + private function countTraceBitmap(bitmap, round, fillColor) { + + var count = 0; + + var x = 0; + while (x < bitmap.width) + { + var y = 0; + while (y < bitmap.height) + { + if (bitmap.getPixel32(x, y) == fillColor) { + count += 1; + } + + y += 1; + } + + x += 1; + } + + trace("(" + round + ") Overwritten pixel count: " + count); + } + + private function dissolveOnce(bitmap, rectangle, destPoint, rand: Number, numPixels: Number): Number { + var red = 0xFFFF0000; + var newRand: Number = bitmap.pixelDissolve(bitmap, rectangle, destPoint, rand, numPixels, red); + return newRand; + } + + private function dissolveRounds( + rounds, + width, height, + useBitmapDataOwnRectangle: Boolean, + sourceRect, + destPoint, + numPixels + ) { + + rounds = Math.max(1, rounds); + + var sourceRectString: String = useBitmapDataOwnRectangle ? "sourceRect: [own]" : "sourceRect: " + sourceRect; + + trace("Dissolving for " + rounds + " rounds, with data: width: " + width + ", height: " + height + ", " + sourceRectString + ", destPoint: " + destPoint + ", numPixels: " + numPixels); + + var bmd2 = new flash.display.BitmapData(width, height, false, 0xFFCCCCCC); + + var round; + var randNum: Number = 0; + for (round = 1; round <= rounds; round++) + { + randNum = dissolveOnce(bmd2, useBitmapDataOwnRectangle ? bmd2.rectangle : sourceRect, destPoint, randNum, numPixels); + countTraceBitmap(bmd2, round, 0xFFFF0000); + + if (randNum < 0) { + trace("Result: " + randNum); + } + } + + trace(""); + } + + private function dissolveRounds_1( + rounds, + width, height, + numPixels + ) { + dissolveRounds(rounds, width, height, true, null, new Point(0, 0), numPixels); + } + + private function dissolveRounds_2( + rounds, + width, height, + sourceRect, + numPixels + ) { + dissolveRounds(rounds, width, height, false, sourceRect, new Point(0, 0), numPixels); + } + + private function dissolveRounds_3( + rounds, + width, height, + sourceRect, + destPoint, + numPixels + ) { + dissolveRounds(rounds, width, height, false, sourceRect, destPoint, numPixels); + } + + public function test() { + + trace("------------------------------------------"); + trace("Basic test."); + trace(""); + dissolveRounds_1(100, 10, 10, 1); + + trace(""); + trace(""); + trace("------------------------------------------"); + trace("`numPixels`."); + trace(""); + dissolveRounds_1(4, 10, 10, 0); + // This apparently bugs out at least one version of Flash Player on AVM1. + //try { + // dissolveRounds_1(4, 10, 10, -1); + //} + //catch (e:Error) { + // trace("Negative `numPixels` should error."); + //} + dissolveRounds_1(35, 10, 10, 3); + + trace(""); + trace(""); + trace("------------------------------------------"); + trace("Dimensions."); + trace(""); + // WARNING: Apparently, `width` or `height` being 1 means that nothing is written, + // not even the pixel at (0, 0). This seems like a bug in Flash Player and will + // not necessarily be emulated. So, do not test for it here. + dissolveRounds_1(61, 150, 2, 5); + dissolveRounds_1(61, 2, 150, 5); + dissolveRounds_1(66, 8, 8, 1); + dissolveRounds_1(66, 7, 9, 1); // 7*9 = 8*8 - 1. + dissolveRounds_1(66, 5, 13, 1); // 5*13 = 8*8 + 1. + + trace(""); + trace(""); + trace("------------------------------------------"); + trace("`sourceRect`."); + trace(""); + dissolveRounds_2(101, 10, 10, new Rectangle(0, 0, 10, 10), 1); + dissolveRounds_2(20, 10, 10, new Rectangle(0, 0, 4, 4), 1); + dissolveRounds_2(35, 10, 10, new Rectangle(0, 0, 8, 4), 1); + dissolveRounds_2(35, 10, 10, new Rectangle(0, 0, 4, 8), 1); + dissolveRounds_2(27, 10, 10, new Rectangle(0, 0, 3, 8), 1); + dissolveRounds_2(31, 10, 10, new Rectangle(0, 0, 4, 7), 1); + dissolveRounds_2(24, 10, 10, new Rectangle(0, 0, 3, 7), 1); + dissolveRounds_2(30, 10, 10, new Rectangle(1, 3, 4, 8), 1); + dissolveRounds_2(4, 10, 10, new Rectangle(14, 3, 4, 8), 1); + dissolveRounds_2(4, 10, 10, new Rectangle(3, 14, 4, 8), 1); + dissolveRounds_2(25, 10, 10, new Rectangle(-1, 3, 4, 8), 1); + dissolveRounds_2(25, 10, 10, new Rectangle(-1, -1, 4, 8), 1); + dissolveRounds_2(30, 10, 10, new Rectangle(2, -1, 4, 8), 1); + dissolveRounds_2(2, 10, 10, new Rectangle(1, 2, -1, -3), 1); + dissolveRounds_2(2, 10, 10, new Rectangle(1, 2, -1, 3), 1); + dissolveRounds_2(2, 10, 10, new Rectangle(1, 2, 1, -3), 1); + dissolveRounds_2(2, 10, 10, new Rectangle(1, 2, 0, 1), 1); + dissolveRounds_2(2, 10, 10, new Rectangle(1, 2, 1, 0), 1); + dissolveRounds_2(2, 10, 10, new Rectangle(1, 2, 0, 0), 1); + // Note: Apparently, Flash Player seems to round width and height + // in really peculiar ways when the x- and y-coordinates have + // fractional components. Therefore, the tests involving + // fractional parts are commented out. + //dissolveRounds_2(18, 10, 10, new Rectangle(0.5, 0.5, 3, 3), 1); + //dissolveRounds_2(18, 10, 10, new Rectangle(0.5, 0.5, 3, 4), 1); + //dissolveRounds_2(27, 10, 10, new Rectangle(0.5, 0.5, 3, 5), 1); + //dissolveRounds_2(18, 10, 10, new Rectangle(0.5, 0.5, 4, 3), 1); + //dissolveRounds_2(18, 10, 10, new Rectangle(0.5, 0.5, 4, 4), 1); + //dissolveRounds_2(14, 10, 10, new Rectangle(0.4, 1, 3, 4), 1); + //dissolveRounds_2(14, 10, 10, new Rectangle(0.6, 1, 3, 4), 1); + //dissolveRounds_2(14, 10, 10, new Rectangle(1, 1, 3.4, 4), 1); + //dissolveRounds_2(14, 10, 10, new Rectangle(1, 1, 3.5, 4), 1); + //dissolveRounds_2(18, 10, 10, new Rectangle(1, 1, 3.6, 4), 1); + //dissolveRounds_2(18, 10, 10, new Rectangle(0.4, 1, 3.4, 4), 1); + //dissolveRounds_2(18, 10, 10, new Rectangle(0.5, 1, 3.4, 4), 1); + //dissolveRounds_2(14, 10, 10, new Rectangle(0.6, 1, 3.4, 4), 1); + //dissolveRounds_2(18, 10, 10, new Rectangle(0.4, 1, 3.5, 4), 1); + //dissolveRounds_2(18, 10, 10, new Rectangle(0.5, 1, 3.5, 4), 1); + //dissolveRounds_2(14, 10, 10, new Rectangle(0.6, 1, 3.5, 4), 1); + //dissolveRounds_2(18, 10, 10, new Rectangle(0.4, 1, 3.6, 4), 1); + //dissolveRounds_2(18, 10, 10, new Rectangle(0.5, 1, 3.6, 4), 1); + //dissolveRounds_2(14, 10, 10, new Rectangle(0.6, 1, 3.6, 4), 1); + try { + dissolveRounds_2(20, 10, 10, null, 1); + } + catch (e: Error) { + trace("`null` `sourceRect` should error: " + e); + } + + trace(""); + trace(""); + trace("------------------------------------------"); + trace("`destPoint`."); + trace(""); + dissolveRounds_3(18, 10, 10, new Rectangle(0, 0, 3, 7), new Point(3, 5), 1); + // This would result in a 1x6 resulting area. And Flash Player's pixelDissolve() + // cannot handle a size where at least one of the dimensions is 1. + //dissolveRounds_3(8, 10, 10, new Rectangle(0, 0, 3, 7), new Point(-2, -1), 1); + dissolveRounds_3(15, 10, 10, new Rectangle(0, 0, 3, 7), new Point(-1, -1), 1); + dissolveRounds_3(3, 10, 10, new Rectangle(0, 0, 3, 7), new Point(-10, -10), 1); + dissolveRounds_3(3, 10, 10, new Rectangle(0, 0, 3, 7), new Point(-2, 10), 1); + dissolveRounds_3(21, 10, 10, new Rectangle(0, 0, 3, 7), new Point(5, 4),1); + + trace(""); + trace(""); + trace("------------------------------------------"); + trace("Default parameters."); + trace(""); + var bmd:BitmapData = new BitmapData(10, 10, false, 0xFFCCCCCC); + // Omitting `numPixels` and `fillColor`. + // Apparently, "numPixels:int (default = 0) — The default is 1/30 of the source area (width x height). " is wrong. + bmd.pixelDissolve(bmd, bmd.rectangle, new Point(0, 0)); + countTraceBitmap(bmd, 0, 0xFF000000); + + trace(""); + trace(""); + trace("------------------------------------------"); + trace("`null` `sourceBitmapData`."); + trace(""); + var bmd2:BitmapData = new BitmapData(10, 10, false, 0xFFCCCCCC); + try { + var result = bmd2.pixelDissolve(null, bmd2.rectangle, new Point(0, 0)); + trace("Result: " + result); + } + catch (e: Error) { + trace("`sourceBitmapData` being `null` should result in error: " + e); + } + + trace(""); + trace(""); + trace("------------------------------------------"); + trace("Wrong type for `sourceBitmapData`."); + trace(""); + var bmd3:BitmapData = new BitmapData(10, 10, false, 0xFFCCCCCC); + try { + var wrongBmd = 5; + var result = bmd3.pixelDissolve(wrongBmd, bmd3.rectangle, new Point(0, 0)); + trace("Result: " + result); + } + catch (e: Error) { + trace("`sourceBitmapData` being the wrong type should result in error: " + e); + } + + trace(""); + trace(""); + trace("------------------------------------------"); + trace("Invalid other bitmap."); + trace(""); + var bmd4:BitmapData = new BitmapData(10, 10, false, 0xFFCCCCCC); + var bmd5:BitmapData = new BitmapData(10, 10, false, 0xFFCFFCCC); + bmd5.dispose(); + try { + var result = bmd4.pixelDissolve(bmd5, bmd4.rectangle, new Point(0, 0)); + trace("Result: " + result); + } + catch (e: Error) { + trace("`sourceBitmapData` being disposed() should result in error: " + e); + } + } + + public static function main() { + var test = new test(); + test.test(); + } +} + diff --git a/tests/tests/swfs/avm1/bitmap_data_pixeldissolve/test.swf b/tests/tests/swfs/avm1/bitmap_data_pixeldissolve/test.swf new file mode 100644 index 000000000..e18991990 Binary files /dev/null and b/tests/tests/swfs/avm1/bitmap_data_pixeldissolve/test.swf differ diff --git a/tests/tests/swfs/avm1/bitmap_data_pixeldissolve/test.toml b/tests/tests/swfs/avm1/bitmap_data_pixeldissolve/test.toml new file mode 100644 index 000000000..dbee897f5 --- /dev/null +++ b/tests/tests/swfs/avm1/bitmap_data_pixeldissolve/test.toml @@ -0,0 +1 @@ +num_frames = 1