Прочитать текстуру...

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Прочитать текстуру...

Сообщение DirectXManiac » 11.02.2006 (Сб) 0:34

Тут такой вопрос... простите но он немного ламерский...
Есть форма, на ней PictureBox. Надо загрузить текстуру из PictureBox, так как её не существует, как файла. Т.е. картинка зашита в DLL а её надо проитать в Direct3DTexture8... Как это сделать =) извините если непонятно пояснил суть пробемы...
#define ROFL 0xDDDD

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 11.02.2006 (Сб) 10:36

могу предложить сохранить картинку в фаил и потом уже использовать
ноя думаб это не самая лутшая идея 8) 8)

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 11.02.2006 (Сб) 11:44

Bonesnapper предложил простой и действенный метод. Можно еще, чтобы не создавать временный файл, воспользоваться CreateTextureFromFileInMemory.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 11.02.2006 (Сб) 20:32

Спасибо! На самом деле были мысли похожие на мысль Bonesnapper но пришёл за советом! Спасибо!
#define ROFL 0xDDDD

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 12.02.2006 (Вс) 15:21

лучше залочить текстуру, получить двумерный массив пикселей, отредактировать, и разлочить. искать в сдк по словам texture и lock
ХЎ

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 12.02.2006 (Вс) 15:25

забыл, кто вопрос задал. сейчас еще тысяча на мой пост будет. так что вот код, создает текстуру 32х32 пикселя. модифицировав можно сделать любой размер.

Код: Выделить всё

' Модуль для работы с текстурами в DirectX 8.1


Option Explicit

' Стурктура цвета, состоящая из трех составляющих
Public Type ST3D_ColorRGB
    R As Byte
    G As Byte
    B As Byte
End Type

' Заголовочный тип структуры файла bmp
Private Type ST3D_BitmapHeader
    lngSize As Long
    intReserved1 As Integer
    intReserved2 As Integer
    lngOffset As Long
    biSize As Long
    biWidth As Long
    biHeight As Long
    biPlanes As Integer
    biBitCount As Integer
    biCompression As Long
    biSizeImage As Long
    biXPelsPerMeter As Long
    biYPelsPerMeter As Long
    biClrUsed As Long
    biClrImportant As Long
End Type

Public Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

' Этот заголовок будет использован для создания текстур "на лету"
Dim StandartBitmapHeader As ST3D_BitmapHeader

' Инициализация начальных значений для работы с модулем
Public Sub InitTexCraftModule()


    With StandartBitmapHeader
        .lngSize = 49152 + 54
        .lngOffset = 54
        .biBitCount = 24
        .biWidth = 32
        .biHeight = 32
        .biSize = 40
        .biPlanes = 1
        .biSizeImage = 49152
        .biCompression = 0
        .biXPelsPerMeter = 50
        .biYPelsPerMeter = 50
    End With 'StandartBitmapHeader
   
   
   
End Sub

'Создание текстуры из массива 32х32 типа ST3D_ColorRGB
Public Function CreateTextureFromRGBArray(TexArr() As ST3D_ColorRGB) As Direct3DTexture8

   
    Dim BMPheader(Len(StandartBitmapHeader) + 1) As Byte
    CopyMemory BMPheader(2), StandartBitmapHeader, Len(StandartBitmapHeader)
    BMPheader(0) = 66:    BMPheader(1) = 77
   
    Dim lm(49152 + 54) As Byte
   
    CopyMemory lm(0), BMPheader(0), 54
    CopyMemory lm(54), TexArr(0, 0), 49152

    Set CreateTextureFromRGBArray = D3DX.CreateTextureFromFileInMemory(Device, lm(0), UBound(lm)) ', 32, 32, D3DX_DEFAULT, 0, D3DFMT_R5G6B5, D3DPOOL_MANAGED, D3DX_FILTER_LINEAR, D3DX_FILTER_LINEAR, &H0, ByVal 0, ByVal 0)
   
End Function
ХЎ

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 12.02.2006 (Вс) 20:59

забыл, кто вопрос задал. сейчас еще тысяча на мой пост будет
Я конечно понимаю что было раньше, но с первого поста я понял что надо делать и уже нашёл инфу... И вообще спасибо d3drm - будет код на будущее, но я уже сделал то, что хотел!
#define ROFL 0xDDDD


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

    TopList