Я новичок в программировании приложения Windows Form. Я хочу захватить мою форму Windows (с помощью функции CaptureScreen()) и сохранить ее в файл, нажав кнопку с помощью SaveFileDialog. Здесь мой код:C++ - сохранить изображение из формы в файл
private: System::Void CaptureScreen()
{
Drawing::Graphics^ myGraphics = this->CreateGraphics();
memoryImage = gcnew Drawing::Bitmap(Size.Width, Size.Height, myGraphics);
Drawing::Graphics^ memoryGraphics = Drawing::Graphics::FromImage(memoryImage);
memoryGraphics->CopyFromScreen(this->Location.X, this->Location.Y, 0, 0, this->Size);
}
private: System::Void btnSave_Click(System::Object^ sender, System::EventArgs^ e)
{
SaveFileDialog^ saveDiag2 = gcnew SaveFileDialog();
saveDiag2->Filter = "Dateityp PNG (*.PNG)|*.PNG|All files (*.*)|*.*";
saveDiag2->FilterIndex = 1;
saveDiag2->RestoreDirectory = true;
if (saveDiag2->ShowDialog() == System::Windows::Forms::DialogResult::OK)
{
String^ savePath = saveDiag2->FileName;
if (saveDiag2->OpenFile() != nullptr)
{
try
{
CaptureScreen();
if (memoryImage != nullptr)
{
memoryImage->Save(savePath, Imaging::ImageFormat::Png);
}
}
catch (Exception^)
{
MessageBox::Show("There was a problem saving the file."
"Check the file permissions.");
}
}
}
}
Я всегда получаю отображение исключений. Что я делаю не так?
'C++ - CLI' правильный тег для этого кода, также добавлены теги для Windows Forms. – crashmstr
Не могли бы вы отобразить содержимое Исключения, это может указывать на то, что не так. Вы также можете поставить точку останова в начале блока try для отладки – purplepsycho
Это ужасно сломанный код обработки ошибок, никогда не отображающий сообщение «это не работает». Это не полезно никому, ни вам. Используйте метод ToString() объекта объекта исключения. В вашем коде отсутствует 'delete memoryImage;' Если вы этого не сделаете, файл останется заблокированным и попытка перезаписать его не удастся. –