/// <summary> /// Tworzy nowy dokument logiczny /// </summary> /// <param name="stronaPoczatkowa">Numer pierwszej stronyw skanie nale¿¹cej do dokumentu logicznego</param> /// <param name="stronaKoncowa">Numer ostatniej stronyw skanie nale¿¹cej do dokumentu logicznego</param> /// <param name="skan">Kompletny skan, z którego wydobywany jest dokument logiczny</param> public DokumentLogiczny(int stronaPoczatkowa, int stronaKoncowa, TiffManager tm) { this._stronaPoczatkowa = stronaPoczatkowa; this._stronaKoncowa = stronaKoncowa; this._skan = null; MemoryStream ms = new MemoryStream(); MemoryStream msdl = new MemoryStream(); ImageCodecInfo ici = pobierzInfoKodeka("image/tiff"); System.Drawing.Imaging.Encoder enkoder = System.Drawing.Imaging.Encoder.SaveFlag; EncoderParameters eps = new EncoderParameters(2); eps.Param[0] = new EncoderParameter(enkoder, (long)EncoderValue.MultiFrame); eps.Param[1] = new EncoderParameter(enkoder, (long)EncoderValue.CompressionNone); //.CompressionLZW); tm[stronaPoczatkowa, false].Save(ms, ImageFormat.Tiff); Bitmap dl = (Bitmap)System.Drawing.Image.FromStream(ms, true, false); dl.Save(msdl, ici, eps); for (int i = stronaPoczatkowa + 1; i <= stronaKoncowa; i++) { eps.Param[0] = new EncoderParameter(enkoder, (long)EncoderValue.FrameDimensionPage); dl.SaveAdd(tm[i, false], eps); } eps.Param[0] = new EncoderParameter(enkoder, (long)EncoderValue.Flush); dl.SaveAdd(eps); this._skan = System.Drawing.Image.FromStream(msdl, true, false); }
/// <summary> /// Okreœla czy wskazana strona w tiffie jest separatorem /// </summary> /// <param name="nrStrony">numer sprawdzanej strony</param> /// <returns>Informacjê czy wskazana strona jest separatorem wg zaimplementowanego algorytmu</returns> public static bool JestSeparatorem(TiffManager tm, int nrStrony) { Bitmap b = new Bitmap(tm[nrStrony, false].GetThumbnailImage(SzerokoscProbki, WysokoscProbki, null, IntPtr.Zero)); int szer = b.Width; int wys = b.Height; int probka = (int)(szer * wys * Probka); int czarne = 0; int wartoscProgowa = (int)(szer * wys * Probka * Prog); Random r = new Random(); for (int i = 0; i < probka; i++) { Color k = b.GetPixel(r.Next(szer), r.Next(wys)); if (k.R + k.G + k.B < 30) { czarne++; } if (czarne > wartoscProgowa) { break; //jeœli przekroczono próg - nie ma sensu dalej sprawdzaæ } if (probka - i + czarne < wartoscProgowa) { break; //jeœli nie ma ju¿ szans na przekroczenie progu - nie ma sensu dalej sprawdzaæ } } return(czarne > wartoscProgowa); }
protected void pobierzSkany(object sender, EventArgs e) { TiffManagerKonfiguracja konf = new TiffManagerKonfiguracja(); konf.FormatMiniatury = ImageFormat.Gif; konf.FormatPodgladu = ImageFormat.Gif; konf.SzerokoscMiniatury = 50; konf.WysokoscMiniatury = 70; konf.SzerokoscPodgladu = 430; konf.WysokoscPodgladu = 600; konf.PlikKonfiguracyjnySkanerow = Pemi.Esoda.Tools.Configuration.ScannersConfigurationFile; konf.KatalogWyjsciowy = Server.MapPath(Pemi.Esoda.Tools.Configuration.VirtualTemporaryDirectory); TiffManager tm = new TiffManager(konf); string[] pliki = System.IO.Directory.GetFiles(MonitorUrzadzen.DomyslnyKatalog, "*.tif?", System.IO.SearchOption.AllDirectories); StringBuilder errMsg = new StringBuilder(); int badFileCount = 0; foreach (string nazwaPliku in pliki) { try { tm.WczytajZPliku(nazwaPliku); tm.ZapiszDokumentyLogiczneDoKatalogu(); if (tm.NazwaPlikuSkanuZeSciezka != null && tm.NazwaPlikuSkanuZeSciezka.Length > 0) { System.IO.File.Delete(tm.NazwaPlikuSkanuZeSciezka); } } catch//(Exception ex) { if (!errMsg.ToString().Contains(nazwaPliku)) { badFileCount++; if (errMsg.Length > 0) { errMsg.Append(", "); } errMsg.Append(nazwaPliku); } } } if (errMsg.Length > 0) { WebMsgBox.Show(this, string.Format("Nie uda³o siê pobraæ wszystkich skanów. {0} spoœród {1} plików nie s¹ poprawnymi plikami tiff lub zawieraj¹ b³êdy nag³ówka. Pliki: {2}", badFileCount, pliki.Length, errMsg.ToString().Replace("\\", "\\\\"))); } liczbaNowychSkanow.Text = MonitorUrzadzen.LiczbaOczekujacychSkanow().ToString(); gvListSkanow.DataBind(); }