Screenshot von PictureBox



  • Servus,
    ich habe in einer Form ein Programm und eine PictureBox in der ich die berechneten Formen Zeichnen kann.

    Jetzt möchte ich das ganze per klick auf btnPrint drucken. Der Text ist kein Problem aber kann ich einen Screenshot NUR von der PictureBox machen?

    Hab schon ein bisschen was versucht aber ich bekomme nur einen Screenshot von der Größe der PictureBox aber die Position ist nicht die richtige...

    private: System::Void printDocument1_PrintPage(System::Object^  sender, System::Drawing::Printing::PrintPageEventArgs^  e)
    		 {
    			 Bitmap^ bmpScreenshot;
    			 Graphics^ gfxScreenshot;
    			 SaveFileDialog^ _saveScreenshot = gcnew SaveFileDialog();
    			 _saveScreenshot->Filter ="*.png|*.png";
    
    			 if (_saveScreenshot->ShowDialog() ==::DialogResult::OK)
    			 {
    		  		 this->Hide();
    				 bmpScreenshot = gcnew Bitmap(Form1::pictureBox->Bounds.Width, Form1::pictureBox->Bounds.Height);
    				 gfxScreenshot = Graphics::FromImage(bmpScreenshot);
    				 gfxScreenshot->CopyFromScreen(Form1::pictureBox->Bounds.X, Form1::pictureBox->Bounds.Y, 0, 0, Form1::pictureBox->Bounds.Size, CopyPixelOperation::SourceCopy);
    				 bmpScreenshot->Save(_saveScreenshot->FileName);
    				 this->Show();
    			 }
    
    			 printDialog = gcnew PrintDialog();
    			 printDocument1->DocumentName = "Geometry";
    
    			 printDialog->Document = printDocument1;
    			 printDialog->AllowSomePages = true;
    

    Danke... Gruß



  • Warum nimmst du nicht einfach direkt "pictureBox->Image"?

    Alternativ kannst du auch einfach DrawToBitmap() verwenden.

    Wenn du dagegen direkt per Paint-Event zeichnest ist ein Panel dafür besser geeignet (als eine PictureBox, da diese nur zum Anzeigen von statischen Bildern gedacht ist).

    P.S. Du hättest bei deinem Code noch die lokalen (sog. Client) Koordinaten in Bildschirmkoordinaten umwandeln müssen (Control::PointToScreen()-Methode).


Anmelden zum Antworten