while(isRunning) { using ( MemoryStream ms = new MemoryStream() ) { lm.GetBitmap(i, sdlPanel1.Width, sdlPanel1.Height).Save(ms, ImageFormat.Bmp); byte[] array = ms.ToArray(); rgbSurfacePtr = SdlImage.IMG_Load_RW(Sdl.SDL_RWFromMem(array, array.Length), 1); } if (rgbSurfacePtr != IntPtr.Zero) { Sdl.SDL_Rect r1 = new Sdl.SDL_Rect(0,0,(short)sdlPanel1.Width,(short)sdlPanel1.Height); Sdl.SDL_BlitSurface(rgbSurfacePtr, ref r1, sdlPanel1.m_SdlSurface,ref r1); if((dynamic = (int)(Sdl.SDL_GetTicks() - starttime)) < goal_fps) Thread.Sleep(goal_fps - dynamic); //show frame Sdl.SDL_Flip(this.sdlPanel1.m_SdlSurface); starttime = Sdl.SDL_GetTicks(); Sdl.SDL_FreeSurface(rgbSurfacePtr); } }