Создайте файл изображения после нажатия PrintScreen

Я хотел бы автоматически сохранить изображение в файл после того, как я нажму "printscreen", но я не знаю, что я делаю неправильно.

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.PrintScreen)
        {
            Image screenshot = Clipboard.GetImage();
            screenshot.Save("c:\\Users\\Default\\Pictures\\screenshot.jpg");
        }
    }

Код не содержит ошибок, он просто не работает, как ожидалось.

4 ответа

По умолчанию метод Save сохраняет в формате png (совместим с bmp файлы, см. примеры в руководстве), попробуйте явно указать формат изображения:

Image screenshot = Clipboard.GetImage();
screenshot.Save("c:\\Users\\Default\\Pictures\\screenshot.jpg", ImageFormat.Jpeg);

По умолчанию используется кодировщик png, а не jpg

http://msdn.microsoft.com/en-US/library/vstudio/ktx83wah.aspx

Если вы хотите сохранить как JPG, вы должны использовать эту перегрузку

Конечно, вы всегда можете изменить ImageFormat и скопировать из любого источника в буфер обмена.

item.SheetObject.CopyBitmapToClipboard();
Image img;
img = Clipboard.GetImage();
img.Save(temporaryFilePath + ".bmp", ImageFormat.Bmp);

Но @Илья Иванов тоже был прав.

Используйте событие KeyUp вместо KeyDown а также ImageFormat сохранить изображение в правильном порядке.

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.PrintScreen)
    {
        Image screenshot = Clipboard.GetImage();
        screenshot.Save("c:\\_temp\\screenshot.jpg", ImageFormat.Jpeg);
    }
}

Код работает для меня без проблем и - конечно же - с сохраненной картинкой.

Другие вопросы по тегам