Page 1 of 1

Wie man einen Screenshot mit Openentk macht

Posted: 13 Feb 2025, 20:34
by Anonymous
Ich bin hierher gekommen, wie man das Bild mit OpenTK erfasst. Erstens habe ich im Beispiel keinen Zugriff auf das Objekt "Glcontrol1". Mein Hauptfenster erbt von opentk.windowing.desktop.gameWindow. Als nächstes scheint das Bild, das ich bekomme, wirklich verschwommen zu sein und hat Bilder horizontal wiederholt. Schließlich kann ich nicht auf alle Mitglieder und Felder zugreifen, die das Beispiel verwendete, also habe ich sie anders extrahiert und ich bin mir nicht sicher, ob sie gleich sind oder nicht. < /P>
Hier ist meine Version von "takescreenshot ()" ", aber ich habe nicht ihre Lösung von" glrefresh () "< /p>

Code: Select all

public Bitmap TakeScreenshot()
{
if (this.Context == null)
throw new Exception("the \"Context\" was null ");
int w = Size.X;
int h = Size.Y;

Box2i boxFromGameWindow = this.ClientRectangle;

Vector2i bottomCoordinate = boxFromGameWindow.Min;
Vector2i topCoordinate = boxFromGameWindow.Max;
Vector2i sizeOfWindowVector = boxFromGameWindow.Size;
Point topLeftPoint = new Point(bottomCoordinate[0], topCoordinate[1]);
Size sizeOfWindow = new Size(sizeOfWindowVector[0], sizeOfWindowVector[1]);

Rectangle convertedRectangle = new Rectangle(0, 0, sizeOfWindowVector[0], sizeOfWindowVector[1]);

Bitmap bmp = new Bitmap(sizeOfWindowVector[0], sizeOfWindowVector[1]);
System.Drawing.Imaging.BitmapData data =
bmp.LockBits(convertedRectangle, System.Drawing.Imaging.ImageLockMode.WriteOnly, bmp.PixelFormat);

GL.ReadPixels(0, 0,   sizeOfWindowVector[0], sizeOfWindowVector[1], PixelFormat.Rgb, PixelType.UnsignedByte, data.Scan0);
bmp.UnlockBits(data);

bmp.RotateFlip(RotateFlipType.RotateNoneFlipY);

return bmp;
}