Pinta.ImageManipulation.BitmapWrapper.EndUpdate C# (CSharp) Method

EndUpdate() public method

public EndUpdate ( ) : void
return void
		public override void EndUpdate ()
		{
			Interlocked.Decrement (ref lock_count);

			if (lock_count == 0)
				surface.UnlockBits (bitmap_data);
		}
	}

Usage Example

		static void Main (string[] args)
		{
			var src_bitmap = new System.Drawing.Bitmap (@"C:\Users\Jonathan\Desktop\helo.png");
			var dst_bitmap = new System.Drawing.Bitmap (src_bitmap.Width, src_bitmap.Height);

			Console.WriteLine ("Image Size: {0}x{1}", src_bitmap.Width, src_bitmap.Height);
			Console.WriteLine ("-------------------------------");

			var src_wrap = new BitmapWrapper (src_bitmap);
			var dst_wrap = new BitmapWrapper (dst_bitmap);

			src_wrap.BeginUpdate ();
			dst_wrap.BeginUpdate ();

			int runs = 1;

			foreach (var effect in GetEffects ()) {
				Settings.SingleThreaded = false;

				// Run once to ensure effect is jitted
				effect.Render (src_wrap, dst_wrap);

				var sw = new Stopwatch ();
				sw.Start ();

				for (int i = 0; i < runs; i++) {
					var tcs = new CancellationTokenSource ();
					var t = effect.RenderAsync (src_wrap, dst_wrap, tcs.Token);
					//tcs.Cancel ();
					t.Wait ();
				}

				var multi = sw.ElapsedMilliseconds / runs;

				Settings.SingleThreaded = true;
				sw.Restart ();

				for (int i = 0; i < runs; i++) {
					var tcs = new CancellationTokenSource ();
					var t = effect.RenderAsync (src_wrap, dst_wrap, tcs.Token);
					//tcs.Cancel ();
					t.Wait ();
				}

				var single = sw.ElapsedMilliseconds / runs;

				Console.WriteLine (" {2} {0} | {1} | {3}", (single.ToString () + "ms").PadRight (7), (multi.ToString () + "ms").PadRight (7), (effect.GetType ().Name + ":").PadRight (30), true);// (single / multi) >= 2);
			}

			src_wrap.EndUpdate ();
			dst_wrap.EndUpdate ();


			//dst_bitmap.Save (@"C:\Users\Jonathan\Desktop\helo2.png");
			Console.WriteLine ();
			Console.WriteLine ("Finished");
			Console.ReadLine ();
		}