Olen yrittänyt tehdä ruudunkaappausohjelmaa ja saankin kuvia ruudulta. Nyt pitäisi saada kuvat videoon. Olen yrittänyt tehdä videota tämän avulla siinä kuitenkaan onnistumatta. Minulla ei ole käyttäjää tuonne, joten en voi ladata lähdekoodia ja muutenkin käsin kopiointi opettaa enemmän :) Oma koodini (suora kopio tuosta vähän karsittuna) ei osaa tallentaa muita kuin neiliön muotoisia kuvia. Mistähän se johtuu? Tässä koodin kohta, jossa virhe tapahtuu:
Public Sub AddFrame(ByVal bmp As Bitmap) bmp.RotateFlip(RotateFlipType.RotateNoneFlipY) Dim bmpData As BitmapData = bmp.LockBits(New Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, bmp.PixelFormat) 'Tämä toimii: 'Dim tmp As Byte() = New Byte(bmpData.Stride * bmpData.Height - 1) {} 'Marshal.Copy(bmpData.Scan0, tmp, 0, bmpData.Stride * bmpData.Height) Dim result As Integer = Avi.AVIStreamWrite(CType(IIf(writeCompressed, compressedStream, StreamPointer), IntPtr), countFrames, 1, bmpData.Scan0, CInt((bmpData.Stride) * (bmpData.Height)), 0, 0, 0) 'Heittää virheen tässä If result <> 0 Then Throw New Exception("Exception in VideoStreamWrite: " + result.ToString()) End If bmp.UnlockBits(bmpData) countFrames += 1 End Sub
AccessViolationException occured: Yritettiin lukea tai kirjoittaa suojattua muistia. Tämä on usein merkki siitä, että toinen muisti on vioittunut.
Moi Henkka!
Kääntelin ton sun Oma koodini-linkin takaa imppaamani viritelmän ja varoitteli, että: Funktio GetVideoStream ei palauta arvoa kaikissa koodipoluissa...
Nappasin sitten pakkaamatonta kokoruutua testi.avi filuun ja kun yritin sulkea formin designerissä niin AviStream.vb filun Close tapahtumassa, Avi.AVIStreamRelease(compressedStream) jutskassa heitteli, että: Yritettiin lukea tai kirjoittaa suojattua muistia...
Ratkaisuna moisiin virheilmoihin olen käyttänyt Microsoft.VisualStudio.OLE.Interop assemblyn IPersistStreamInit castausta malliin jotakuinkin tyyliin:
'... Dim ips As IPersistStreamInit ips = CType(ObjektiJoka*****ilee, IPersistStreamInit) ips.InitNew() '...
Itselläni ei heitä virhettä Closessa vaan tuossa kuvan tallentamisessa. Pakkaamattomia kokokuvia se suostuu tallentamaan, mutta wmp ei avaa videota. Käyttäisin muutenkin mielummin pakattua videota, mutta se heittää tuossa ylempänä mianitussa kohdassa virheen.
Edit. Pakkaamiseen yritän käyttää Microsoft Video 1
Edit2. Olisiko jollain valmista koodia, jolla pystyy tallentamaan videoita? Riittää ihan yhden funktion ratkaisu, josta voin väännellä sopivan :)
Moi taas Henkka!
Täältä löytyis pikku avifilu wrapperi...
Moi taas Henkka!
Halutessasi voit impata täältä tohon Corinna John'n Wrapperiin pohjautuvan toimivan screen recorder viritelmän.
Aihe on jo aika vanha, joten et voi enää vastata siihen.