public void Desaturate(string name) { Profile adjustment = Profile.CreateAbstract(10, 1.0, 0.0, 0.0, 0.0, -100.0, null, ColorCIExyY.D50, ColorCIExyY.D50); string path = CreateFile(name, 32); using (FilterRequest req = new FilterRequest(path)) { IFilter filter = new ColorFilter(adjustment); Assert.IsTrue(filter.Convert(req), "Filter failed to operate"); req.Preserve(req.Current); Assert.IsTrue(System.IO.File.Exists(req.Current.LocalPath), "Error: Did not create " + req.Current); Assert.IsTrue(new FileInfo(req.Current.LocalPath).Length > 0, "Error: " + req.Current + "is Zero length"); using (ImageFile img = ImageFile.Create(req.Current)) { Pixbuf pixbuf = img.Load(); Assert.IsNotNull(pixbuf); } } }
public void StretchRealFile () { string path = "/home/lewing/Desktop/img_0081.jpg"; FilterRequest req = new FilterRequest (path); FilterSet set = new FilterSet (); set.Add (new AutoStretch ()); set.Add (new UniqueNameFilter (Path.GetDirectoryName (path))); set.Convert (req); req.Preserve (req.Current); }
public void StretchRealFile() { string path = "/home/lewing/Desktop/img_0081.jpg"; FilterRequest req = new FilterRequest(path); FilterSet set = new FilterSet(); set.Add(new AutoStretch()); set.Add(new UniqueNameFilter(Path.GetDirectoryName(path))); set.Convert(req); req.Preserve(req.Current); }
public void Linearize(string name) { GammaTable table = new GammaTable(new ushort [] { 0x0000, 0x0000, 0x0000, 0x0000 }); Profile link = new Profile(IccColorSpace.Rgb, new GammaTable [] { table, table, table }); string path = CreateFile(name, 32); using (FilterRequest req = new FilterRequest(path)) { ColorFilter filter = new ColorFilter(); filter.DeviceLink = link; Assert.IsTrue(filter.Convert(req), "Filter failed to operate"); req.Preserve(req.Current); Assert.IsTrue(System.IO.File.Exists(req.Current.LocalPath), "Error: Did not create " + req.Current); Assert.IsTrue(new FileInfo(req.Current.LocalPath).Length > 0, "Error: " + req.Current + "is Zero length"); using (ImageFile img = ImageFile.Create(req.Current)) { Pixbuf pixbuf = img.Load(); Assert.IsNotNull(pixbuf); // We linearized to all black so this should pass the gray test Assert.IsTrue(PixbufUtils.IsGray(pixbuf, 1), "failed to linearize" + req.Current); } } }
private void HandleResponse (object sender, Gtk.ResponseArgs args) { int size = 0; bool UserCancelled = false; bool rotate = true; // Lets remove the mail "create mail" dialog Dialog.Destroy(); if (args.ResponseId != Gtk.ResponseType.Ok) { return; } ProgressDialog progress_dialog = null; progress_dialog = new ProgressDialog (Catalog.GetString ("Preparing email"), ProgressDialog.CancelButtonType.Stop, selection.Count, parent_window); size = GetScaleSize(); // Which size should we scale to. 0 --> Original // evaluate mailto command and define attachment args for cli System.Text.StringBuilder attach_arg = new System.Text.StringBuilder (); switch (Preferences.Get<string> (Preferences.GNOME_MAILTO_COMMAND)) { case "thunderbird %s": case "mozilla-thunderbird %s": case "seamonkey -mail -compose %s": case "icedove %s": attach_arg.Append(","); break; case "kmail %s": attach_arg.Append(" --attach "); break; default: //evolution falls into default, since it supports mailto uri correctly attach_arg.Append("&attach="); break; } rotate = rotate_check.Active; // Should we automatically rotate original photos. Preferences.Set (Preferences.EXPORT_EMAIL_ROTATE, rotate); // Initiate storage for temporary files to be deleted later tmp_paths = new System.Collections.ArrayList(); // Create a tmp directory. tmp_mail_dir = System.IO.Path.GetTempFileName (); // Create a tmp file System.IO.File.Delete (tmp_mail_dir); // Delete above tmp file System.IO.Directory.CreateDirectory (tmp_mail_dir); // Create a directory with above tmp name System.Text.StringBuilder mail_attach = new System.Text.StringBuilder (); FilterSet filters = new FilterSet (); if (size != 0) filters.Add (new ResizeFilter ((uint) size)); else if (rotate) filters.Add (new OrientationFilter ()); filters.Add (new UniqueNameFilter (tmp_mail_dir)); for (int i = 0; i < selection.Count; i++) { Photo photo = selection [i] as Photo; if ( (photo != null) && (!UserCancelled) ) { if (progress_dialog != null) UserCancelled = progress_dialog.Update (String.Format (Catalog.GetString ("Exporting picture \"{0}\""), photo.Name)); if (UserCancelled) break; try { // Prepare a tmp_mail file name FilterRequest request = new FilterRequest (photo.DefaultVersionUri); filters.Convert (request); request.Preserve(request.Current); mail_attach.Append(attach_arg.ToString() + request.Current.ToString ()); // Mark the path for deletion tmp_paths.Add (request.Current.LocalPath); } catch (Exception e) { Console.WriteLine("Error preparing {0}: {1}", selection[photo_index].Name, e.Message); HigMessageDialog md = new HigMessageDialog (parent_window, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Close, Catalog.GetString("Error processing image"), String.Format(Catalog.GetString("An error occured while processing \"{0}\": {1}"), selection[photo_index].Name, e.Message)); md.Run(); md.Destroy(); UserCancelled = true; } } } // foreach if (progress_dialog != null) progress_dialog.Destroy (); // No need to keep this window if (UserCancelled) DeleteTempFile(); else { // Send the mail :) string mail_subject = Catalog.GetString("my photos"); switch (Preferences.Get<string> (Preferences.GNOME_MAILTO_COMMAND)) { // openSuSE case "thunderbird %s": System.Diagnostics.Process.Start("thunderbird", " -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\""); break; case "icedove %s": System.Diagnostics.Process.Start("icedove", " -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\""); break; case "mozilla-thunderbird %s": System.Diagnostics.Process.Start("mozilla-thunderbird", " -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\""); break; case "seamonkey -mail -compose %s": System.Diagnostics.Process.Start("seamonkey", " -mail -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\""); break; case "kmail %s": System.Diagnostics.Process.Start("kmail", " --composer --subject \"" + mail_subject + "\"" + mail_attach); break; default: GnomeUtil.UrlShow ("mailto:?subject=" + System.Web.HttpUtility.UrlEncode(mail_subject) + mail_attach); break; } // Check if we have any temporary files to be deleted if (tmp_paths.Count > 0) { // Fetch timeout value from preferences. In seconds. Needs to be multiplied with 1000 to get msec uint delete_timeout; delete_timeout = (uint) (Preferences.Get<int> (Preferences.EXPORT_EMAIL_DELETE_TIMEOUT_SEC)); delete_timeout = delete_timeout * 1000; // to get milliseconds. // Start a timer and when it occurs, delete the temp files. GLib.Timeout.Add (delete_timeout, new GLib.TimeoutHandler (DeleteTempFile)); } } }
public void ProcessImage (int image_num, Filters.FilterSet filter_set) { IBrowsableItem photo = collection [image_num]; string photo_path = photo.DefaultVersionUri.LocalPath; string path; ScaleRequest req; req = requests [0]; MakeDir (SubdirPath (req.Name)); path = SubdirPath (req.Name, ImageName (image_num)); using (Filters.FilterRequest request = new Filters.FilterRequest (photo.DefaultVersionUri)) { filter_set.Convert (request); if (request.Current.LocalPath == path) request.Preserve(request.Current); else File.Copy (request.Current.LocalPath, path, true); if (photo != null && photo is Photo && Core.Database != null) { Core.Database.Exports.Create ((photo as Photo).Id, (photo as Photo).DefaultVersionId, ExportStore.FolderExportType, // FIXME this is wrong, the final path is the one // after the Xfer. UriList.PathToFileUriEscaped (path).ToString ()); } using (Exif.ExifData data = new Exif.ExifData (photo_path)) { for (int i = 1; i < requests.Length; i++) { req = requests [i]; if (scale && req.AvoidScale (size)) continue; Filters.FilterSet req_set = new Filters.FilterSet (); req_set.Add (new Filters.ResizeFilter ((uint)Math.Max (req.Width, req.Height))); if ((bool)Preferences.Get (Preferences.EXPORT_FOLDER_SHARPEN)) { if (req.Name == "lq") req_set.Add (new Filters.SharpFilter (0.1, 2, 4)); if (req.Name == "thumbs") req_set.Add (new Filters.SharpFilter (0.1, 2, 5)); } using (Filters.FilterRequest tmp_req = new Filters.FilterRequest (photo.DefaultVersionUri)) { req_set.Convert (tmp_req); MakeDir (SubdirPath (req.Name)); path = SubdirPath (req.Name, ImageName (image_num)); System.IO.File.Copy (tmp_req.Current.LocalPath, path, true); } } } } }
public void ProcessImage(int image_num, FilterSet filter_set) { IPhoto photo = Collection [image_num]; string path; ScaleRequest req; req = requests [0]; MakeDir (SubdirPath (req.Name)); path = SubdirPath (req.Name, ImageName (image_num)); using (FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri)) { filter_set.Convert (request); if (request.Current.LocalPath == path) request.Preserve (request.Current); else System.IO.File.Copy (request.Current.LocalPath, path, true); if (photo != null && photo is Photo && App.Instance.Database != null) App.Instance.Database.Exports.Create ((photo as Photo).Id, (photo as Photo).DefaultVersionId, ExportStore.FolderExportType, // FIXME this is wrong, the final path is the one // after the Xfer. new SafeUri (path).ToString ()); for (int i = 1; i < requests.Length; i++) { req = requests [i]; if (scale && req.AvoidScale (Size)) continue; FilterSet req_set = new FilterSet (); req_set.Add (new ResizeFilter ((uint)Math.Max (req.Width, req.Height))); bool sharpen; try { sharpen = Preferences.Get<bool> (FolderExport.SHARPEN_KEY); } catch (NullReferenceException) { sharpen = true; Preferences.Set (FolderExport.SHARPEN_KEY, true); } if (sharpen) { if (req.Name == "lq") req_set.Add (new SharpFilter (0.1, 2, 4)); if (req.Name == "thumbs") req_set.Add (new SharpFilter (0.1, 2, 5)); } using (FilterRequest tmp_req = new FilterRequest (photo.DefaultVersion.Uri)) { req_set.Convert (tmp_req); MakeDir (SubdirPath (req.Name)); path = SubdirPath (req.Name, ImageName (image_num)); System.IO.File.Copy (tmp_req.Current.LocalPath, path, true); } } } }
private void HandleResponse (object sender, Gtk.ResponseArgs args) { int size = 0; bool UserCancelled = false; // Lets remove the mail "create mail" dialog Destroy(); if (args.ResponseId != Gtk.ResponseType.Ok) { return; } ProgressDialog progress_dialog = null; progress_dialog = new ProgressDialog (Catalog.GetString ("Preparing email"), ProgressDialog.CancelButtonType.Stop, selection.Count, parent_window); size = GetScaleSize(); // Which size should we scale to. 0 --> Original // evaluate mailto command and define attachment args for cli System.Text.StringBuilder attach_arg = new System.Text.StringBuilder (); switch (Preferences.Get<string> (Preferences.GNOME_MAILTO_COMMAND)) { case "thunderbird %s": case "mozilla-thunderbird %s": case "seamonkey -mail -compose %s": case "icedove %s": attach_arg.Append(","); break; case "kmail %s": attach_arg.Append(" --attach "); break; default://evolution falls into default, since it supports mailto uri correctly attach_arg.Append("&attach="); break; } // Create a tmp directory. tmp_mail_dir = System.IO.Path.GetTempFileName (); // Create a tmp file System.IO.File.Delete (tmp_mail_dir); // Delete above tmp file System.IO.Directory.CreateDirectory (tmp_mail_dir); // Create a directory with above tmp name System.Text.StringBuilder mail_attach = new System.Text.StringBuilder (); FilterSet filters = new FilterSet (); if (size != 0) filters.Add (new ResizeFilter ((uint) size)); filters.Add (new UniqueNameFilter (new SafeUri (tmp_mail_dir))); for (int i = 0; i < selection.Count; i++) { var photo = selection [i]; if ( (photo != null) && (!UserCancelled) ) { if (progress_dialog != null) UserCancelled = progress_dialog.Update (String.Format (Catalog.GetString ("Exporting picture \"{0}\""), photo.Name)); if (UserCancelled) break; try { // Prepare a tmp_mail file name FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri); filters.Convert (request); request.Preserve(request.Current); mail_attach.Append(((i == 0 && attach_arg.ToString () == ",") ? "" : attach_arg.ToString()) + request.Current.ToString ()); } catch (Exception e) { Hyena.Log.ErrorFormat ("Error preparing {0}: {1}", selection[i].Name, e.Message); HigMessageDialog md = new HigMessageDialog (parent_window, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Close, Catalog.GetString("Error processing image"), String.Format(Catalog.GetString("An error occured while processing \"{0}\": {1}"), selection[i].Name, e.Message)); md.Run(); md.Destroy(); UserCancelled = true; } } } // foreach if (progress_dialog != null) progress_dialog.Destroy (); // No need to keep this window if (UserCancelled) return; // Send the mail :) string mail_subject = Catalog.GetString("My Photos"); switch (Preferences.Get<string> (Preferences.GNOME_MAILTO_COMMAND)) { // openSuSE case "thunderbird %s": System.Diagnostics.Process.Start("thunderbird", " -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\""); break; case "icedove %s": System.Diagnostics.Process.Start("icedove", " -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\""); break; case "mozilla-thunderbird %s": System.Diagnostics.Process.Start("mozilla-thunderbird", " -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\""); break; case "seamonkey -mail -compose %s": System.Diagnostics.Process.Start("seamonkey", " -mail -compose \"subject=" + mail_subject + ",attachment='" + mail_attach + "'\""); break; case "kmail %s": System.Diagnostics.Process.Start("kmail", " --composer --subject \"" + mail_subject + "\"" + mail_attach); break; case "evolution %s": //evo doesn't urldecode the subject GtkBeans.Global.ShowUri (Screen, "mailto:?subject=" + mail_subject + mail_attach); break; default: GtkBeans.Global.ShowUri (Screen, "mailto:?subject=" + System.Web.HttpUtility.UrlEncode(mail_subject) + mail_attach); break; } }
public void Linearize (string name) { GammaTable table = new GammaTable (new ushort [] { 0x0000, 0x0000, 0x0000, 0x0000 }); Profile link = new Profile (IccColorSpace.Rgb, new GammaTable [] { table, table, table }); string path = CreateFile (name, 32); using (FilterRequest req = new FilterRequest (path)) { ColorFilter filter = new ColorFilter (); filter.DeviceLink = link; Assert.IsTrue (filter.Convert (req), "Filter failed to operate"); req.Preserve (req.Current); Assert.IsTrue (System.IO.File.Exists (req.Current.LocalPath), "Error: Did not create " + req.Current); Assert.IsTrue (new FileInfo (req.Current.LocalPath).Length > 0, "Error: " + req.Current + "is Zero length"); using (ImageFile img = ImageFile.Create (req.Current)) { Pixbuf pixbuf = img.Load (); Assert.IsNotNull (pixbuf); // We linearized to all black so this should pass the gray test Assert.IsTrue (PixbufUtils.IsGray (pixbuf, 1), "failed to linearize" + req.Current); } } }
public void Desaturate (string name) { Profile adjustment = Profile.CreateAbstract (10, 1.0, 0.0, 0.0, 0.0, -100.0, null, ColorCIExyY.D50, ColorCIExyY.D50); string path = CreateFile (name, 32); using (FilterRequest req = new FilterRequest (path)) { IFilter filter = new ColorFilter (adjustment); Assert.IsTrue (filter.Convert (req), "Filter failed to operate"); req.Preserve (req.Current); Assert.IsTrue (System.IO.File.Exists (req.Current.LocalPath), "Error: Did not create " + req.Current); Assert.IsTrue (new FileInfo (req.Current.LocalPath).Length > 0, "Error: " + req.Current + "is Zero length"); using (ImageFile img = ImageFile.Create (req.Current)) { Pixbuf pixbuf = img.Load (); Assert.IsNotNull (pixbuf); } } }
private void HandleResponse (object sender, Gtk.ResponseArgs args) { long new_size = 0; // long orig_size = 0; long actual_total_size = 0; int size = 0; System.IO.FileInfo file_info; bool UserCancelled = false; bool rotate = true; // Lets remove the mail "create mail" dialog Dialog.Destroy(); if (args.ResponseId != Gtk.ResponseType.Ok) { return; } ProgressDialog progress_dialog = null; actual_total_size = 0; progress_dialog = new ProgressDialog (Catalog.GetString ("Preparing email"), ProgressDialog.CancelButtonType.Stop, selection.Items.Length, parent_window); size = GetScaleSize(); // Which size should we scale to. 0 --> Original // evaluate mailto command and define attachment args for cli System.Text.StringBuilder attach_arg = new System.Text.StringBuilder (); switch (Preferences.Get (Preferences.GNOME_MAILTO_COMMAND) as string) { case "thunderbird %s": case "mozilla-thunderbird %s": case "seamonkey -mail -compose %s": case "icedove %s": attach_arg.Append(","); break; case "kmail %s": attach_arg.Append(" --attach "); break; default: //evolution falls into default, since it supports mailto uri correctly attach_arg.Append("&attach="); break; } rotate = rotate_check.Active; // Should we automatically rotate original photos. Preferences.Set (Preferences.EXPORT_EMAIL_ROTATE, rotate); // Initiate storage for temporary files to be deleted later tmp_paths = new System.Collections.ArrayList(); // Create a tmp directory. tmp_mail_dir = System.IO.Path.GetTempFileName (); // Create a tmp file System.IO.File.Delete (tmp_mail_dir); // Delete above tmp file System.IO.Directory.CreateDirectory (tmp_mail_dir); // Create a directory with above tmp name System.Text.StringBuilder mail_attach = new System.Text.StringBuilder (); FilterSet filters = new FilterSet (); if (size != 0) filters.Add (new ResizeFilter ((uint) size)); else if (rotate) filters.Add (new OrientationFilter ()); filters.Add (new UniqueNameFilter (tmp_mail_dir)); foreach (Photo photo in selection.Items) { if ( (photo != null) && (!UserCancelled) ) { if (progress_dialog != null) UserCancelled = progress_dialog.Update (String.Format (Catalog.GetString ("Exporting picture \"{0}\""), photo.Name)); if (UserCancelled) break; file_info = new System.IO.FileInfo (photo.GetVersionPath(photo.DefaultVersionId)); // orig_size = file_info.Length; // Prepare a tmp_mail file name FilterRequest request = new FilterRequest (photo.DefaultVersionUri); filters.Convert (request); request.Preserve(request.Current); mail_attach.Append(attach_arg.ToString() + System.Web.HttpUtility.UrlEncode (request.Current.ToString())); // Mark the path for deletion tmp_paths.Add (request.Current.LocalPath); // Update the running total of the actual file sizes. file_info = new System.IO.FileInfo (request.Current.LocalPath); new_size = file_info.Length; actual_total_size += new_size; // Update dialog to indicate Actual size! // This is currently disabled, since the dialog box is not visible at this stage. // string approxresult = SizeUtil.ToHumanReadable (actual_total_size); // ActualMailSize.Text = approxresult; //System.Console.WriteLine ("Orig file size {0}, New file size {1}, % {4}, Scaled to size {2}, new name {3}", //orig_size, new_size, size, tmp_path, 1 - ((orig_size-new_size)/orig_size)); } } // foreach if (progress_dialog != null) progress_dialog.Destroy (); // No need to keep this window if (UserCancelled) DeleteTempFile(); else { // Send the mail :) switch (Preferences.Get (Preferences.GNOME_MAILTO_COMMAND) as string) { // openSuSE case "thunderbird %s": System.Diagnostics.Process.Start("thunderbird", " -compose \"subject=my photos,attachment='" + mail_attach + "'\""); break; case "icedove %s": System.Diagnostics.Process.Start("thunderbird", " -compose \"subject=my photos,attachment='" + mail_attach + "'\""); break; case "mozilla-thunderbird %s": System.Diagnostics.Process.Start("mozilla-thunderbird", " -compose \"subject=my photos,attachment='" + mail_attach + "'\""); break; case "seamonkey -mail -compose %s": System.Diagnostics.Process.Start("seamonkey", " -mail -compose \"subject=my photos,attachment='" + mail_attach + "'\""); break; case "kmail %s": System.Diagnostics.Process.Start("kmail", " --composer --subject \"my photos\"" + mail_attach); break; default: GnomeUtil.UrlShow (parent_window,"mailto:?subject=my%20photos" + mail_attach); break; } // Check if we have any temporary files to be deleted if (tmp_paths.Count > 0) { // Fetch timeout value from preferences. In seconds. Needs to be multiplied with 1000 to get msec uint delete_timeout; delete_timeout = (uint) ( (int) Preferences.Get (Preferences.EXPORT_EMAIL_DELETE_TIMEOUT_SEC) ); delete_timeout = delete_timeout * 1000; // to get milliseconds. // Start a timer and when it occurs, delete the temp files. GLib.Timeout.Add (delete_timeout, new GLib.TimeoutHandler (DeleteTempFile)); } } }
public void ProcessImage(int image_num, Filters.FilterSet filter_set) { IBrowsableItem photo = collection [image_num]; string photo_path = photo.DefaultVersionUri.LocalPath; string path; ScaleRequest req; req = requests [0]; MakeDir(SubdirPath(req.Name)); path = SubdirPath(req.Name, ImageName(image_num)); using (Filters.FilterRequest request = new Filters.FilterRequest(photo.DefaultVersionUri)) { filter_set.Convert(request); if (request.Current.LocalPath == path) { request.Preserve(request.Current); } else { File.Copy(request.Current.LocalPath, path, true); } if (photo != null && photo is Photo && Core.Database != null) { Core.Database.Exports.Create((photo as Photo).Id, (photo as Photo).DefaultVersionId, ExportStore.FolderExportType, // FIXME this is wrong, the final path is the one // after the Xfer. UriList.PathToFileUriEscaped(path).ToString()); } using (Exif.ExifData data = new Exif.ExifData(photo_path)) { for (int i = 1; i < requests.Length; i++) { req = requests [i]; if (scale && req.AvoidScale(size)) { continue; } Filters.FilterSet req_set = new Filters.FilterSet(); req_set.Add(new Filters.ResizeFilter((uint)Math.Max(req.Width, req.Height))); if ((bool)Preferences.Get(Preferences.EXPORT_FOLDER_SHARPEN)) { if (req.Name == "lq") { req_set.Add(new Filters.SharpFilter(0.1, 2, 4)); } if (req.Name == "thumbs") { req_set.Add(new Filters.SharpFilter(0.1, 2, 5)); } } using (Filters.FilterRequest tmp_req = new Filters.FilterRequest(photo.DefaultVersionUri)) { req_set.Convert(tmp_req); MakeDir(SubdirPath(req.Name)); path = SubdirPath(req.Name, ImageName(image_num)); System.IO.File.Copy(tmp_req.Current.LocalPath, path, true); } } } } }