public static byte[] ToBytes(ArtworkFormat format, Gdk.Pixbuf pixbuf, out short horizontalPadding, out short verticalPadding) { horizontalPadding = 0; verticalPadding = 0; bool disposePixbuf = false; if (format.Rotation > 0) { pixbuf = Rotate (pixbuf, format.Rotation); disposePixbuf = true; } if (pixbuf.Height != format.Height || pixbuf.Width != format.Width) { int padX, padY; Gdk.Pixbuf scaled = Scale (pixbuf, format.Width, format.Height, out padX, out padY); horizontalPadding = (short) padX; verticalPadding = (short) padY; if (disposePixbuf) { pixbuf.Dispose (); } pixbuf = scaled; disposePixbuf = true; } byte[] data = null; switch (format.PixelFormat) { case PixelFormat.Rgb565: data = PackRgb565 (pixbuf, false); break; case PixelFormat.Rgb565BE: data = PackRgb565 (pixbuf, true); break; case PixelFormat.IYUV: data = PackIYUV (pixbuf); break; default: throw new ApplicationException ("Unknown pixel format: " + format.PixelFormat); } if (disposePixbuf) { pixbuf.Dispose (); } return data; }
private PixbufImageSurface(Gdk.Pixbuf pixbuf, IntPtr data, int width, int height, int channels, int rowstride, IntPtr pixels) : base(data, channels == 3 ? Format.Rgb24 : Format.Argb32, width, height, width * 4) { this.data = data; CreateSurface (width, height, channels, rowstride, pixels); SetDestroyFunc (); if (pixbuf != null && pixbuf.Handle != IntPtr.Zero) { pixbuf.Dispose (); } }
protected Gdk.Pixbuf TransformAndDispose (Gdk.Pixbuf orig) { if (orig == null) return null; Gdk.Pixbuf rotated = PixbufUtils.TransformOrientation (orig, this.Orientation, true); //ValidateThumbnail (photo, rotated); if (rotated != orig) orig.Dispose (); return rotated; }
protected Gdk.Pixbuf TransformAndDispose(Gdk.Pixbuf orig) { if (orig == null) return null; Gdk.Pixbuf rotated = FSpot.Utils.PixbufUtils.TransformOrientation (orig, this.Orientation); orig.Dispose (); return rotated; }
public override void Save (Gdk.Pixbuf pixbuf, System.IO.Stream stream) { // Console.WriteLine ("starting save"); // First save the imagedata int quality = Header.GuessQuality (); quality = quality == 0 ? 75 : quality; byte [] image_data = PixbufUtils.Save (pixbuf, "jpeg", new string [] {"quality" }, new string [] { quality.ToString () }); System.IO.MemoryStream buffer = new System.IO.MemoryStream (); buffer.Write (image_data, 0, image_data.Length); buffer.Position = 0; // Console.WriteLine ("setting thumbnail"); SetThumbnail (pixbuf); SetDimensions (pixbuf.Width, pixbuf.Height); pixbuf.Dispose (); // Console.WriteLine ("saving metatdata"); SaveMetaData (buffer, stream); // Console.WriteLine ("done"); buffer.Close (); }
public static void WindowDestroy (Gdk.Window window) { // There is a bug in GDK, and subsequently in Gdk# 2.8.5 through 2.12.1 // where the managed Gdk.Window.Destroy function does not obtain a // normal reference (non-toggle) on the GdkWindow before calling // _destroy on it, which the native function apparently expects. // https://bugzilla.novell.com/show_bug.cgi?id=382186 // http://anonsvn.mono-project.com/viewcvs/trunk/gtk-sharp/gdk/Window.custom?rev=101734&r1=42529&r2=101734 if (window == null) { return; } if (!toggle_ref_supported) { window.Destroy (); return; } // If this ever happens I will move out west and start farming... if (g_object_ref == null || gdk_window_destroy == null) { window.Destroy (); return; } if (invoke_args == null) { invoke_args = new object[1]; } invoke_args[0] = window.Handle; g_object_ref.Invoke (null, invoke_args); gdk_window_destroy.Invoke (null, invoke_args); window.Dispose (); }