Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование игр, графики и искусственного интеллекта > Битмэп из текстуры


Автор: EgoBrain 2.3.2009, 03:57
Собственно и вопрос в названии темы: как из объекта Texture получить Bitmap или Image. Если вопрос не ясен, то конкретно задача - получить изображение из текстуры объекта и присвоить его контролу (свойство BackgroundImage или Image).

Автор: Rickert 2.3.2009, 05:55
Текстура находится в видео памяти только, или в оперативной тоже есть?

Автор: EgoBrain 2.3.2009, 07:05
Цитата(Rickert @ 2.3.2009,  05:55)
Текстура находится в видео памяти только, или в оперативной тоже есть?

Если честно не знаю. MeshFlags.Manged стоит, вроде же этот флаг за память отвечает? А к чему вопрос, можно только из оперативной вытащить? Вообще если это слишком затратно то я другой способ буду использовать.

Добавлено через 5 минут и 26 секунд
Ааа, что-то я маху дал smile Ну у меня массив типа текстура создается и там они все хранятся (загружаются)
Код

Texture[] meshTextures;

, значит получается в оперативной, или я не правильно понимаю. Объясните. Имхо оператор new создает массив в ОП.

Автор: Rickert 2.3.2009, 09:42
О чём говорим? OpenGL/ DirectX?

Автор: arilou 2.3.2009, 15:28
EgoBrain, а что тебе мешает загрузить System.Drawing.Bitmap руками по имени файла текстуры?

твоя проблема в том, что текстура может быть такого формата, который не поддерживается bitmap'ом, и тебе придется ее конвертировать вручную или при помощи сторонней библиотеки.

Добавлено через 17 секунд
Rickert, Managed DirectX

Автор: EgoBrain 3.3.2009, 02:53
Цитата(arilou @ 2.3.2009,  15:28)
EgoBrain, а что тебе мешает загрузить System.Drawing.Bitmap руками по имени файла текстуры?

твоя проблема в том, что текстура может быть такого формата, который не поддерживается bitmap'ом, и тебе придется ее конвертировать вручную или при помощи сторонней библиотеки.

Добавлено @ 15:29
Rickert, Managed DirectX

Так вот мне и пришлось создавать еще отдельный стринговский массив для хранения имен файлов текстур, пока что так решил. Просто думал, что можно имея текстуру получить легко битмэп, ковырял методы - ничего подобного нет... Вообще логично же такую возможность предположить (если текстура допустимого формата)?
З.Ы. arilou, так как насчет дополнительного вопроса про память, как у вас там в XNA определяется где хранится текстура (RAM/VRAM)? smile

Автор: Rickert 3.3.2009, 04:11
EgoBrain, "а вот и недостатки dx перед ogl?" smile 

Автор: galileopro 5.7.2009, 14:48
Вот так:
Код
private void Coord(int number, double x, double y, double z)
        {
            string File;
            int size=16;
            File = "Texture"+number.ToString()+".bmp";
            byte[, ,] Bits = new byte[size, size, 3];
            Gl.glEnable(Gl.GL_TEXTURE_2D);
            Bitmap bitmap = new Bitmap(File);
            for (int i = 0; i <= size-1; i++)
                for (int j = 0; j <= size-1; j++)
                {
                    Bits[i, j, 0] = bitmap.GetPixel(i, j).R;
                    Bits[i, j, 1] = bitmap.GetPixel(i, j).G;
                    Bits[i, j, 2] = bitmap.GetPixel(i, j).B;
                }

            Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0,
                            Gl.GL_RGB, size, size, 0,
                            Gl.GL_RGB, Gl.GL_UNSIGNED_BYTE, @Bits);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);

            Gl.glPushMatrix();
            Gl.glRotated(-90, 0, 0, 1);
            Gl.glTranslated(-1.0+y/450, -1.0+x/450, z/450);
            Gl.glScaled(0.04, 0.04, 0.04);
            Gl.glBegin(Gl.GL_QUADS);

            Gl.glTexCoord2d(0.0, 1.0);
            Gl.glVertex2d(0, 1);

            Gl.glTexCoord2d(0.0f, 0.0f);
            Gl.glVertex2d(0, 0);

            Gl.glTexCoord2d(1.0, 0.0f);
            Gl.glVertex2d(1, 0);

            Gl.glTexCoord2d(1.0f, 1.0f);
            Gl.glVertex2d(1, 1);
            Gl.glEnd();
            Gl.glPopMatrix();
            Gl.glFlush();
        }


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)