Forum - C# / VB.NET
- [vb.net] Problema snapshot con directshow lib
evil ways (Normal User)
Rookie
Messaggi: 26
Iscritto: 06/01/2010
salve a tutti,
ho creato un applicazione che scatta degli snapshot su un file in riproduzione all'interno del programma usando la libreria DirectShow. Ecco il codice:
Codice sorgente - presumibilmente VB.NET
Dim Buff As Long
Dim zero As IntPtr = IntPtr.Zero
Dim Mstep As Integer
Dim bit1 As Bitmap
basicVideo.GetCurrentImage ( Buff, zero)
zero = Marshal.AllocCoTaskMem ( Buff)
basicVideo.GetCurrentImage ( Buff, zero)
Dim gg As New BitmapInfoHeader
Marshal.PtrToStructure ( zero, gg)
Mstep = gg.ImageSize / gg.Height
bit1 = New Bitmap( gg.Width , gg.Height , Mstep, Imaging.PixelFormat .Format32bppRgb , zero)
bit1.RotateFlip ( RotateFlipType.RotateNoneFlipY )
Dim bm_dest As New Bitmap( gg.Width , gg.Height )
Dim gr_dest As Graphics = Graphics.FromImage ( bm_dest)
gr_dest.DrawImage ( bit1, 0, 0, _
bm_dest.Width + 1 , _
bm_dest.Height + 1 )
bm_dest.Save ( "c:\1.bmp" , System.Drawing .Imaging .ImageFormat .Bmp )
PictureBox1.Image = Nothing
PictureBox1.Image = bit1
PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize
Ultima modifica effettuata da evil ways il 05/07/2012 alle 22:29
ampeg (Normal User)
Pro
Messaggi: 124
Iscritto: 21/04/2011
da una prima occhiata veloce potrebbe essere che l'argomento n.3 (MStep) del costruttore della classe bitmap che genera l'immagine "bit1" ha un valore che sballa l'offset dell'immagine
controlla che soddisfi i requisiti del costruttore
http://msdn.microsoft.com/it-it/library/zy1a2d14.aspx
evil ways (Normal User)
Rookie
Messaggi: 26
Iscritto: 06/01/2010
Grazie ampeg per la dritta ho risolto ecco il codice
Codice sorgente - presumibilmente VB.NET
Dim Buff As Long
Dim zero As IntPtr = IntPtr.Zero
Dim Mstep As Integer
Dim bit1 As Bitmap
basicVideo.GetCurrentImage ( Buff, zero)
zero = Marshal.AllocCoTaskMem ( Buff)
basicVideo.GetCurrentImage ( Buff, zero)
Dim gg As New BitmapInfoHeader
Marshal.PtrToStructure ( zero, gg)
Mstep = gg.Width * CInt ( ( gg.BitCount / 8) )
bit1 = New Bitmap( gg.Width , gg.Height , - Mstep, Imaging.PixelFormat .Format32bppRgb , CType ( ( zero.ToInt32 ( ) + gg.Size + gg.ImageSize - Mstep) , IntPtr) )
Dim bm_dest As New Bitmap( gg.Width , gg.Height )
Dim gr_dest As Graphics = Graphics.FromImage ( bm_dest)
gr_dest.DrawImage ( bit1, 0, 0, _
bm_dest.Width + 1 , _
bm_dest.Height + 1 )
bm_dest.Save ( "c:\0" & ics & ".jpg" , System.Drawing .Imaging .ImageFormat .Bmp )
'Threading.Thread.Sleep(1000)