我正在做一个Asp.Net网络应用程序。我需要录制屏幕并保存录制的文件。我搜索了很多,并从here
获得了最适合我的代码这是代码
public class ScreenRecorder
{
private static string tempDir = Path.GetTempPath() + "/snapshot/";
private static System.Threading.Thread snap = new System.Threading.Thread(Snapshot);
private static System.Drawing.Rectangle _Bounds = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
public static System.Drawing.Rectangle Bounds
{
get { return _Bounds; }
set { _Bounds = value; }
}
private static void Snapshot()
{
if (!Directory.Exists(tempDir))
Directory.CreateDirectory(tempDir);
int Co = 0;
do
{
Co += 1;
System.Threading.Thread.Sleep(50);
System.Drawing.Bitmap X = new System.Drawing.Bitmap(_Bounds.Width, _Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
using(System.Drawing.Graphics G = System.Drawing.Graphics.FromImage(X)) {
G.CopyFromScreen(_Bounds.Location, new System.Drawing.Point(), _Bounds.Size);
System.Drawing.Rectangle CurBounds = new System.Drawing.Rectangle(System.Drawing.Point.Subtract(System.Windows.Forms.Cursor.Position,Bounds.Size), System.Windows.Forms.Cursor.Current.Size);
System.Windows.Forms.Cursors.Default.Draw(G, CurBounds);
}
System.IO.FileStream FS = new System.IO.FileStream(tempDir + FormatString(Co.ToString(), 5, '0') + ".png", System.IO.FileMode.OpenOrCreate);
X.Save(FS, System.Drawing.Imaging.ImageFormat.Png);
X.Dispose();
FS.Close();
} while (true);
}
public static void ClearRecording()
{
if (Directory.Exists(tempDir))
Directory.Delete(tempDir, true);
Directory.CreateDirectory(tempDir);
}
public static void Save(string Output)
{
System.Windows.Media.Imaging.GifBitmapEncoder G = new System.Windows.Media.Imaging.GifBitmapEncoder();
List<System.IO.FileStream> X = new List<System.IO.FileStream>();
foreach (string Fi in Directory.GetFiles(tempDir, "*.png", SearchOption.TopDirectoryOnly))
{
System.IO.FileStream TempStream = new System.IO.FileStream(Fi, System.IO.FileMode.Open);
System.Windows.Media.Imaging.BitmapFrame Frame = System.Windows.Media.Imaging.BitmapFrame.Create(TempStream);
X.Add(TempStream);
G.Frames.Add(Frame);
}
System.IO.FileStream FS = new System.IO.FileStream(Output, System.IO.FileMode.OpenOrCreate);
G.Save(FS);
FS.Close();
foreach (System.IO.FileStream St in X)
{
St.Close();
}
}
public static void Start()
{
snap = new System.Threading.Thread(Snapshot);
snap.Start();
}
public static void Stop()
{
snap.Abort();
}
private static string FormatString(string S, int places, char character)
{
if (S.Length >= places)
return S;
for (int X = S.Length; X <= places; X++)
{
S = character + S;
}
return S;
}
}
class Program
{
static void Main(string[] args)
{
ScreenRecorder.Start();
System.Threading.Thread.Sleep(5000);
ScreenRecorder.Stop();
ScreenRecorder.Save(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\video.gif");
ScreenRecorder.ClearRecording();
}
}
我在asp.net中创建了一个新类并添加了上面的代码,但它引发了我的错误,如#34;名称路径在当前上下文中并不存在&#34; &#34;名称目录不存在于当前上下文&#34;
中以下是屏幕截图 如何解决此错误,我希望在单击按钮后记录屏幕。但是如何在按钮点击上调用类。请帮忙。!!提前致谢 !!
答案 0 :(得分:5)
因为要使用目录的类,您必须引用System.IO;
在后面的代码上添加此行using System.IO;
,或者您可以单击该类并按Ctrl+.
它会在弹出菜单中建议相关的命名空间。
答案 1 :(得分:4)
您正在尝试使用来自不同名称空间的类,一个未引用的类。
有两种方法可以解决这个问题。
一种方法是将命名空间与要使用的类一起编写。例如:
if (!System.IO.Directory.Exists(tempDir))
System.IO.Directory.CreateDirectory(tempDir);
如果您只需要使用一次类,但是如果您想更频繁地使用它,这非常有用...
using System.IO;
来引用整个命名空间,就像Aria回答一样。 Visual Studio中还有一个巧妙的小技巧:
如果您尝试使用的类实际存在于链接库中(在这种情况下,System.IO
是mscorlib.dll
的一部分,因此默认情况下应该链接),然后您可以右键单击在未知类上,应该有一个名为“Resolve”的菜单选项,它将所需的命名空间添加到using
部分或将完整的命名空间添加到类名。