Sie wahrscheinlich so etwas wie Camtasia verwenden möchten. Kommt darauf an, warum du das Video machst.
Ich benutze eine neu geschriebene Version von Jeff User-Friendly Exception Handling, und er verwendet BitBlt von GDI, um Screenshots zu erfassen. Scheint schnell genug zu mir, aber ich habe es nicht bewertet, und wir verwenden es nur für einzelne Schüsse, wenn eine unbehandelte Ausnahme ausgelöst wird.
#region Win32 API screenshot calls
// Win32 API calls necessary to support screen capture
[DllImport("gdi32", EntryPoint = "BitBlt", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int BitBlt(int hDestDC, int x, int y, int nWidth, int nHeight, int hSrcDC, int xSrc,
int ySrc, int dwRop);
[DllImport("user32", EntryPoint = "GetDC", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int GetDC(int hwnd);
[DllImport("user32", EntryPoint = "ReleaseDC", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int ReleaseDC(int hwnd, int hdc);
#endregion
private static ImageFormat screenshotImageFormat = ImageFormat.Png;
/// <summary>
/// Takes a screenshot of the desktop and saves to filename and format specified
/// </summary>
/// <param name="fileName"></param>
private static void TakeScreenshotPrivate(string fileName)
{
Rectangle r = Screen.PrimaryScreen.Bounds;
using (Bitmap bitmap = new Bitmap(r.Right, r.Bottom))
{
const int SRCCOPY = 13369376;
using (Graphics g = Graphics.FromImage(bitmap))
{
// Get a device context to the windows desktop and our destination bitmaps
int hdcSrc = GetDC(0);
IntPtr hdcDest = g.GetHdc();
// Copy what is on the desktop to the bitmap
BitBlt(hdcDest.ToInt32(), 0, 0, r.Right, r.Bottom, hdcSrc, 0, 0, SRCCOPY);
// Release device contexts
g.ReleaseHdc(hdcDest);
ReleaseDC(0, hdcSrc);
string formatExtension = screenshotImageFormat.ToString().ToLower();
string expectedExtension = string.Format(".{0}", formatExtension);
if (Path.GetExtension(fileName) != expectedExtension)
{
fileName += expectedExtension;
}
switch (formatExtension)
{
case "jpeg":
BitmapToJPEG(bitmap, fileName, 80);
break;
default:
bitmap.Save(fileName, screenshotImageFormat);
break;
}
// Save the complete path/filename of the screenshot for possible later use
ScreenshotFullPath = fileName;
}
}
}
/// <summary>
/// Save bitmap object to JPEG of specified quality level
/// </summary>
/// <param name="bitmap"></param>
/// <param name="fileName"></param>
/// <param name="compression"></param>
private static void BitmapToJPEG(Image bitmap, string fileName, long compression)
{
EncoderParameters encoderParameters = new EncoderParameters(1);
ImageCodecInfo codecInfo = GetEncoderInfo("image/jpeg");
encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, compression);
bitmap.Save(fileName, codecInfo, encoderParameters);
}
Ist "fotogram" ein aktuelles Wort? – bzlm
Es gibt viele viele Apps, die das wunderbar machen. Möchtest du das Rad wirklich neu erfinden? –
Mal sehen ... ist das eine "nützliche Apps" -Seite oder eine Programmier-Frage-Seite? Es ist einer von ihnen, aber ich vergesse immer wieder was. – bzlm