private void desdePDFToolStripMenuItem_Click(object sender, EventArgs e) { var ofd = new OpenFileDialog { Multiselect = false, CheckFileExists = true, DefaultExt = "pdf", Filter = "Archivos PDF (*.pdf)|*.pdf", Title = "Abrir Archvivo PDF" }; if (ofd.ShowDialog() != DialogResult.OK) { return; } frmPreview = new ScanPreview(); frmPreview.StartPosition = FormStartPosition.CenterScreen; frmPreview.tblPreview.changeSizeThumb(new Size(96, 96)); frmPreview.Show(); PdfiumViewer.IPdfDocument documento; documento = PdfiumViewer.PdfDocument.Load(ofd.FileName); frmPrincipal.Instance.TSPBGeneral.Visible = true; for (int i = 0; i < documento.PageCount; i++) { using (var image = documento.Render(i, (int)(documento.PageSizes[i].Width * 2.5), (int)(documento.PageSizes[i].Height * 2.5), 150, 150, true)) { Scan.Images.IScannedImage imagen1 = new Scan.Images.ScannedImage(new Bitmap(image), ScanBitDepth.C24Bit, false); imagenesCapturadas[iActualTipoDocumento].Images.Add(imagen1); frmPreview.tblPreview.AppendImage(imagen1); Application.DoEvents(); } } tblImagenes.UpdateImages(imagenesCapturadas[iActualTipoDocumento].Images); frmPrincipal.Instance.TSPBGeneral.Visible = false; if (frmPreview != null) { frmPreview.Close(); frmPreview.Dispose(); } }
private void SetupTwain() { var appId = TWIdentity.CreateFromAssembly(DataGroups.Image, Assembly.GetEntryAssembly()); _twain = new TwainSession(appId); _twain.StateChanged += (s, e) => { PlatformInfo.Current.Log.Info("State changed to " + _twain.State + " on thread " + Thread.CurrentThread.ManagedThreadId); }; _twain.TransferError += (s, e) => { PlatformInfo.Current.Log.Info("Got xfer error on thread " + Thread.CurrentThread.ManagedThreadId); }; _twain.DataTransferred += (s, e) => { PlatformInfo.Current.Log.Info("Transferred data event on thread " + Thread.CurrentThread.ManagedThreadId); // example on getting ext image info var infos = e.GetExtImageInfo(ExtendedImageInfo.Camera).Where(it => it.ReturnCode == ReturnCode.Success); foreach (var it in infos) { var values = it.ReadValues(); PlatformInfo.Current.Log.Info(string.Format("{0} = {1}", it.InfoID, values.FirstOrDefault())); break; } // handle image data Image img = null; if (e.NativeData != IntPtr.Zero) { var stream = e.GetNativeImageStream(); if (stream != null) { img = Image.FromStream(stream); } } else if (!string.IsNullOrEmpty(e.FileDataPath)) { img = new Bitmap(e.FileDataPath); } if (img != null) { this.BeginInvoke(new Action(() => { Scan.Images.IScannedImage imagen = new Scan.Images.ScannedImage(new Bitmap(img), ScanBitDepth.C24Bit, false); imagenesCapturadas.Images.Add(imagen); frmPreview.tblPreview.AppendImage(imagen); })); } }; _twain.SourceDisabled += (s, e) => { PlatformInfo.Current.Log.Info("Source disabled event on thread " + Thread.CurrentThread.ManagedThreadId); this.BeginInvoke(new Action(() => { //Se detuvo el proceso de Digitalizacion. //Poner controles para digitalizar de nuevo. btnDigitalizar.Enabled = true; if (frmPreview != null) { frmPreview.Close(); frmPreview.Dispose(); } tblImagenes.UpdateImages(imagenesCapturadas.Images); LoadSourceCaps(); })); }; _twain.TransferReady += (s, e) => { PlatformInfo.Current.Log.Info("Transferr ready event on thread " + Thread.CurrentThread.ManagedThreadId); e.CancelAll = _stopScan; }; // either set sync context and don't worry about threads during events, // or don't and use control.invoke during the events yourself PlatformInfo.Current.Log.Info("Setup thread = " + Thread.CurrentThread.ManagedThreadId); _twain.SynchronizationContext = SynchronizationContext.Current; if (_twain.State < 3) { // use this for internal msg loop _twain.Open(); // use this to hook into current app loop //_twain.Open(new WindowsFormsMessageLoopHook(this.Handle)); } }