Быстрая загрузка tga

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Быстрая загрузка tga

Сообщение Gemini » 13.12.2007 (Чт) 23:08

Добрый вечер!

Люди добрые мне нужен алгоритм БЫСТРОЙ загрузки tga файлов.
Искал на планет сёрс и нашёл но очёнь медленно, примерно 3 секунды загружается рисунок размером 800*600.*24
Искал на форуме, все ссылки битые :(

Надо гараздо быстрее (не медленней чем bmp (менее 1 сек)).
Пожалуйста кто может подскажите (может у кого код есть?)

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 14.12.2007 (Пт) 11:23

Где-то Mikle выставлял пример(ы)... Если на найдешь, стучись к нему в PM :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 15.12.2007 (Сб) 14:45

Код: Выделить всё
Dim B() As Byte
Dim H As Integer, W As Integer, Bit As Integer
Open "E:\tga.tga" For Binary As #1
Get #1, 13, H
Get #1, 15, W
Get #1, 17, Bit
ReDim B(1 To Bit \ 8, 1 To H, 1 To W)
Get #1, 19, B
Close #1

Загружает за 0 секунд :)
С=[::::::::::> ™ e398wallpapers.narod.ru

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Сообщение Gemini » 15.12.2007 (Сб) 14:54

|( () ( T |/| |(

Это ты молодец! но проблемма в том что это надо ищё и нарисовать.
Находил примеры но там по пиксельно (А это как известно ОООчень долго)

И ещё вопрос Воспроизвидение AVI при помощи DirectX. всё примеры которые я видел работают при помощи конролов wma и т.д.

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 15.12.2007 (Сб) 15:18

Код: Выделить всё
Private Const BI_RGB = 0&
Private Const DIB_RGB_COLORS = 0

Private Type BITMAPINFOHEADER
        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

Private Type RGBQUAD
        rgbBlue As Byte
        rgbGreen As Byte
        rgbRed As Byte
        rgbReserved As Byte
End Type

Private Type BITMAPINFO
        bmiHeader As BITMAPINFOHEADER
        bmiColors As RGBQUAD
End Type
Private Declare Function SetDIBitsToDevice Lib "gdi32" _
            (ByVal hdc As Long, _
            ByVal x As Long, _
            ByVal y As Long, _
            ByVal dx As Long, _
            ByVal dy As Long, _
            ByVal SrcX As Long, _
            ByVal SrcY As Long, _
            ByVal Scan As Long, _
            ByVal NumScans As Long, _
            Bits As Any, _
            BitsInfo As BITMAPINFO, _
            ByVal wUsage As Long) As Long
           
Private Sub Form_Load()
Dim B() As Byte
Dim H As Integer, W As Integer, Bit As Integer
Open App.Path & "\tga.tga" For Binary As #1
Get #1, 13, W
Get #1, 15, H
Get #1, 17, Bit
ReDim B(1 To Bit \ 8, 1 To H, 1 To W)
Get #1, 19, B
Close #1

Dim bi24BitInfo As BITMAPINFO
With bi24BitInfo.bmiHeader
  .biBitCount = Bit
  .biCompression = BI_RGB
  .biPlanes = 1
  .biSize = Len(bi24BitInfo.bmiHeader)
  .biWidth = W
  .biHeight = H
End With
SetDIBitsToDevice Me.hdc, 0, 0, bi24BitInfo.bmiHeader.biWidth, _
            bi24BitInfo.bmiHeader.biHeight, 0, _
            0, 0, bi24BitInfo.bmiHeader.biHeight, _
            B(1, 1, 1), bi24BitInfo, DIB_RGB_COLORS
End Sub

На всякий случай вылаживаю исходник.

Насчёт AVI через DX незнаю, но можно через API.
Вложения
TGA.rar
(56.35 Кб) Скачиваний: 66
С=[::::::::::> ™ e398wallpapers.narod.ru

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 15.12.2007 (Сб) 17:31

Gemini писал(а):|( () ( T |/| |(
И ещё вопрос Воспроизвидение AVI при помощи DirectX. всё примеры которые я видел работают при помощи конролов wma и т.д.
Видео нужно воспроизводить через DirectShow, так быстро и удобно.
Вот пример из DirectX SDK 8
Вложения
VBDemo.rar
(30.36 Кб) Скачиваний: 52

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 19.12.2007 (Ср) 16:43

Только, выше написанный код, работает только с одним из многих возможных видов TGA - 24 биным, несжатым. Если все TGA будут делаться самостоятельно - то ничего страшного, а если может попасться любой - то это не решение проблемы.
Программисты не глючат - глючат компиляторы...


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Yandex-бот и гости: 16

    TopList