示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        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();
        }