нет, такой подход не подходит. Нужно использовать либо средства самого фреймворка тао. Либо сделать так: пройтись по всем точкам сцены, получить их цвет и перекопировать в picturebox и потом уже сам picturebox сохранять или печатать. Но для этого надо узнать какая ф-ия получает цвет по определенным координатам.
Ну тогда void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
Считывает пиксельные данные из прямоугольника буфера кадра, чей левый нижний угол находится в точке с оконными координатами (x, y), а ширина и высота равны width и height, и сохраняет его в массиве, на который указывает аргумент pixels. Аргумент format задает характер элементов пиксельных данных, которые должны быть считаны (величина индекса или величины R, G, B или A в соответствии с таблицей 8-1), а type задает тип данных для каждого элемента
Стоит ли переходить на Windows 10?Windows 10 установлена на каждый 3-й компьютер. Какие плюсы от перехода? DirectX 12 работает только в Windows 10?
Как установить Windows 10?Как бесплатно и легально скачать? Как записать и установить с последними обновлениями?
Сохраните страницу!
Регистрация
Регистрируясь, вы принимаете правила сайта. Если вы не получили код подтв. регистрации - не
забудьте проверить папку спам.
×
Восстановление пароля
Пожалуйста, заполните поля, после чего вы получите код подтверждения на ваш Email. Если код не пришел в течении нескольких минут - проверьте папку спам.
×
Авторизация
Авторизуйтесь с помощью соц. сети или с помощью аккаунта на сайте:
Bitmap bmp = new Bitmap(this.Width, this.Height);
this.DrawToBitmap(bmp,new Rectangle(0, 0, this.Width, this.Height));
bmp.save(...)
Правда я так не проверял, но по идее должно сработать (this это simpleopenglcontrol или форма окна)
void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
Считывает пиксельные данные из прямоугольника буфера кадра, чей левый нижний угол находится в точке с оконными координатами (x, y), а ширина и высота равны width и height, и сохраняет его в массиве, на который указывает аргумент pixels. Аргумент format задает характер элементов пиксельных данных, которые должны быть считаны (величина индекса или величины R, G, B или A в соответствии с таблицей 8-1), а type задает тип данных для каждого элемента
Gl.glReadBuffer(Gl.GL_FRONT);
Gl.glReadPixels(0, 0, AnT.Width, AnT.Height, Gl.GL_RGB, Gl.GL_UNSIGNED_BYTE, buffer);
Graphics g = pictureBox1.CreateGraphics();
for (int i=1; i<AnT.Width ; i++)
{
for (int j = 1; j < AnT.Height; j+=3)
{
g.FillRectangle(new SolidBrush(Color.FromArgb(255, buffer[j] % 255, buffer[j + 1] % 255, buffer[j + 2] % 255)), i, j, 1, 1);
}
}
вот так ковыряю(попытка перекинуть все пиксели в picturebox), но че не очень получился.
char[] buffer = new char[AnT.Width * AnT.Height * 3];
Gl.glReadBuffer(Gl.GL_FRONT);
Gl.glReadPixels(0, 0, AnT.Width, AnT.Height,
Gl.GL_RGB, Gl.GL_UNSIGNED_BYTE, buffer);
int a = 0;
Graphics g = pictureBox1.CreateGraphics();
for (int i=0; i<AnT.Width ; i++)
{
for (int j = 0; j < AnT.Height; j++)
{
g.FillRectangle(new SolidBrush(Color.FromArgb(255,
buffer[a] % 255,
buffer[a + 1] % 255,
buffer[a + 2] % 255)),
i, j, 1, 1);
a++;
}
}
Если будет все нормально — значит ошибка в
g.FillRectangle(new SolidBrush(Color.FromArgb(255,
buffer[a] % 255,
buffer[a + 1] % 255,
buffer[a + 2] % 255)),
i, j, 1, 1);
иначе в чтении буфера. (например стоит режим
Gl.glReadBuffer(Gl.GL_FRONT);
в то время как при инициализации у вас указано
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
private Bitmap GetBitmap()
{
Gl.glFlush();
Bitmap bitmap = new Bitmap(AnT.Width, AnT.Height+50);
BitmapData bitmapData = bitmap.LockBits(
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
Gl.glReadBuffer(Gl.GL_FRONT);
Gl.glReadPixels(0, 0, bitmap.Width, bitmap.Height,
Gl.GL_BGR_EXT, Gl.GL_UNSIGNED_BYTE, bitmapData.Scan0);
bitmap.UnlockBits(bitmapData);
bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);
return bitmap;
}