से वीडियो बनाएं क्या स्टैक पर छवि स्रोत जोड़ने और इसे से कोई वीडियो बनाने का कोई आसान तरीका है?ImageSource
उत्तर
आप एक उदाहरण के रूप
http://joshsmithonwpf.wordpress.com/2008/04/23/good-old-fashion-image-animations-in-wpf/
उपयोग कर सकते हैं। इसके बाद आप एक वीडियो कैप्चर प्रोग्राम जैसे स्नैगिट या माइक्रोसॉफ्ट एक्सप्रेशन एन्कोडर प्रो का उपयोग वीडियो
त्वरित उत्तर के लिए धन्यवाद। हाँ, लेकिन मैं एक ऐसा असम्पीडित एवीआई या कुछ आउटपुट की तरह rahter होगा: डी – Anders
जोश स्मिथ का ब्लॉग यहां राज द्वारा इंगित किया गया है (http://joshsmithonwpf.wordpress.com/2008/04/23/good-old-fashion-image-animations-in-wpf/) WPF ऐप में किसी फ़ोल्डर से छवियों को दिखाने का एक अच्छा उदाहरण है।
इस बार काम कर रहा है आप Saveen रेड्डीज ब्लॉग पर देखने के वीडियो http://blogs.msdn.com/b/saveenr/archive/2008/09/22/wpf-xaml-saving-an-animation-as-an-avi-video-file.aspx
हाँ, यह कोई समस्या नहीं है, मैं उनके दृष्टिकोण को समझता हूं। लेकिन छवियों से एक असम्पीडित एवीआई आदि बनाने के लिए एक एपीआई या कुछ होना चाहिए? धन्यवाद। – Anders
उपयोग कैसे बिटमैप्स से एक avi बनाने के लिए पर नमूना कोड के लिए इस पुस्तकालय avifilewrapper खोज करने के लिए एप्लिकेशन कन्वर्ट करने के लिए कर सकते हैं। यह article बताता है कि आप अपने दृश्यों को बिटमैप्स में कैसे प्रस्तुत कर सकते हैं। मुझे नहीं लगता कि इससे इससे भी आसान हो जाएगा।
चूंकि डब्ल्यूपीएफ में वीडियो एन्कोडिंग लाइब्रेरी शामिल नहीं है, इसलिए आपको एन्कोडिंग करने के लिए बाहरी पर दुबला होना होगा। This blog post वर्णन करता है कि आप ऐसा करने के लिए विंडोज मीडिया एन्कोडर का उपयोग कैसे कर सकते हैं। वैकल्पिक रूप से, आप अपने ऐप के साथ मेनकोडर की तरह कुछ बंडल कर सकते हैं और इसे एक बाहरी प्रक्रिया के रूप में शुरू कर सकते हैं जिसे आप अपने ऐप से नियंत्रित और मॉनीटर करते हैं।
मैंने पहले से ही ऐसी कक्षा की है। मुझे केवल अपनी "ImageInfo" सबमिट करना है जो एक सिस्टम है। ड्रॉइंग बिटमैप।
Public Function WpfBitmapSourceToBitmap(ByVal source As BitmapSource) As System.Drawing.Bitmap
If source Is Nothing Then Return Nothing
Dim bmp As New System.Drawing.Bitmap(source.PixelWidth, source.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
Dim data As System.Drawing.Imaging.BitmapData = bmp.LockBits(New System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp.Size), System.Drawing.Imaging.ImageLockMode.[WriteOnly], System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
source.CopyPixels(Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride)
bmp.UnlockBits(data)
Return bmp
End Function
तो मैं यह करने के लिए फ्रेम जोड़ सकते हैं और एक पूर्व-चयनित कोडेक (उदाहरण के लिए XVid MPEG4) के साथ एक AVI फ़ाइल के रूप में यह स्टोर करने के लिए
Public Class clsAviWriter
Inherits MAINInterface.TB.Imaging.Pia7.clsDspTemplate
Private cAvi As AviReaderWriter.AviFile.AviManager
Private AviStream As AviReaderWriter.AviFile.VideoStream
Private AudioStream As AviReaderWriter.AviFile.AudioStream
Private cFps As clsTbQueue
Private OldFpsDate As Date = Now
''' <summary>
''' The image object to paint graphical objects on it
''' </summary>
''' <value>descriptor of the image</value>
Public Overrides Property ImageInfo() As MAINInterface.TB.Imaging.Pia7.clsImageInfo
Get
Return Me._ImageInfo
End Get
Set(ByVal value As MAINInterface.TB.Imaging.Pia7.clsImageInfo)
Me._ImageInfo = value
Call WriteFrame()
Call Me.OnPropertyChanged(Me.Guid)
End Set
End Property
Private Sub WriteFrame()
Dim D As Date = Now
Dim Fps As Single
Me.cFps.Values.Add(D.Subtract(Me.OldFpsDate).Ticks)
Me.OldFpsDate = D
Me.cFps.Trim()
Fps = 1000/New TimeSpan(Me.cFps.Average).TotalMilliseconds
Me.cFps.BufferSize = TB.Math.myTrim(Fps * 1, 1, 1000)
If Me.AviStream IsNot Nothing Then
Me.AviStream.AddFrame(Me._ImageInfo.Image.Clone)
End If
End Sub
Public Sub New()
Me.ClassDescription = "Write images into an avi file"
Me.cFps = New clsTbQueue(10)
End Sub
Private Sub InitializeAvi()
Dim W As String
Dim Fps As Single
Dim di As New IO.DirectoryInfo(TB.SystemMain.AppPath & "Avi\")
TB.FileSystem.CreateDirectories(di)
W = IO.Path.Combine(di.FullName, "Record_" & Now.Ticks.ToString("0") & ".avi")
Me.cAvi = New AviReaderWriter.AviFile.AviManager(W, False)
Dim Opts As New AviReaderWriter.AviFile.Avi.AVICOMPRESSOPTIONS
Opts.fccType = 0
Opts.fccHandler = 1684633208
Opts.dwKeyFrameEvery = 0
Opts.dwQuality = 0 '0 ... 10000
Opts.dwFlags = 8 'AVICOMRPESSF_KEYFRAMES = 4
Opts.dwBytesPerSecond = 0
Opts.lpFormat = 0
Opts.lpParms = New IntPtr(0)
Opts.cbParms = 3532
Opts.dwInterleaveEvery = 0
Fps = 1000/New TimeSpan(Me.cFps.Average).TotalMilliseconds
'Dim bm1 As Bitmap
'bm1 = TB.Imaging.CreateReScaledImage(Me.pic.Image, New Size(Me.pic.Image.Width, Me.pic.Image.Height), False)
Me.AviStream = cAvi.AddVideoStream(Opts, Math.Floor(TB.Math.myTrim(Fps, 1, 50)), Me._ImageInfo.Image.Clone)
End Sub
Public Overrides Property Run() As Boolean
Get
Return Me._Run
End Get
Set(ByVal value As Boolean)
If Me._Run <> value Then
Me._Run = value
If Me._Run = True Then
Call InitializeAvi()
Else
If Me.cAvi IsNot Nothing Then
Me.cAvi.Close()
Me.cAvi = Nothing
Me.AviStream = Nothing
End If
End If
Call Me.OnPropertyChanged(Me.Guid)
End If
End Set
End Property
End Class
एक AviClass किया: यह निम्नलिखित कोड का उपयोग करके आसान बनाया जा सकता है
अधिक कोड के लिए यहाँ देखो: http://www.wischik.com/lu/programmer/avi_utils.html और MSDN या http://www.codeproject.com/KB/audio-video/avigenerator.aspx
मैं sourcecode दिखाने के लिए पोस्ट किया है कि कैसे इस तरह के एक दृश्य की तरह दिखता है (कोड ऊपर कुछ और संदर्भ जो जनता के लिए उपलब्ध नहीं हैं की जरूरत है) कर सकते हैं। आप देख सकते हैं कि आपको केवल आरंभ करने, फ्रेम जोड़ने, एफपीएस मान स्टोर करने और हार्डडिस्क में सुरक्षित करने की आवश्यकता है।
यदि चाहें तो भी, आप डायरेक्टशो की खोज कर सकते हैं यह देखने के लिए कि सभी कैसे काम करते हैं।
यदि मैं इसे और अधिक बार उठा सकता हूं तो मैं चाहता हूं। यह ऐसा कुछ है जिसे मैं भी करने में सक्षम होना पसंद करूंगा। – Tim