FreeBasic
Главная
Вход
Регистрация
Вторник, 12.11.2024, 22:09Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Работа с библиотекой DevIL
WQДата: Понедельник, 18.05.2015, 15:04 | Сообщение # 1
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Нужен пример работы с этой библиотекой обработки графики. Есть только загрузка\сохранение, что-то другие функции подключить не получается, например, из ILU.
Интересует изменение размера картинки и возможность перевода изображения в FB-формат (ImageCreate и т.д. тут нужно как-то преобразовать данные от функции ilGetData)


Сообщение отредактировал WQ - Понедельник, 18.05.2015, 15:57
 
haavДата: Понедельник, 18.05.2015, 20:18 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1372
Репутация: 49
Статус: Offline
Перед запуском примера в папке lib нужно переименовать или удалить файл libILU.dll.a , если конечно там есть файл libILU.a. Если нет этого файла , поищи в прошлых версиях компилятора, или на крайняк пиши, я скину.

Код
'' DevIL example

#include once "IL/il.bi"
#include once "IL/ilu.bi"

If (ilGetInteger(IL_VERSION_NUM) < IL_VERSION) Then
      Print "DevIL version is different" : Sleep : End 1
End If

Screen 17,32

ilInit()

dim as string filename = exepath() & "/../../fblogo.bmp"

Dim As ILuint fblogo
ilGenImages(1, @fblogo)
ilBindImage(fblogo)
ilLoadImage(filename)

' фильтр подбирается в зависимости от фото, бывают:
'ILU_NEAREST
'ILU_LINEAR
'ILU_BILINEAR
'ILU_SCALE_BOX
'ILU_SCALE_TRIANGLE
'ILU_SCALE_BELL
'ILU_SCALE_BSPLINE
'ILU_SCALE_LANCZOS3
'ILU_SCALE_MITCHELL
'для данного фото я подобрал билинейный
iluImageParameter ( ILU_FILTER, ILU_BILINEAR)   

' изменяем размер
iluScale ( 480, 360, ilGetInteger( IL_IMAGE_DEPTH ) )
' размеры изображения
Var w = ilGetInteger(IL_IMAGE_WIDTH)
Var h = ilGetInteger(IL_IMAGE_HEIGHT)

Dim As UByte Ptr pixdata
' создаем изображение FB
Dim As Any Ptr fbImage = ImageCreate(w,h)
' получаем буфер с пикселями из изображения FB
ImageInfo(fbImage, w, h, , , pixdata)   

' поворачиваем пиксели на 180 градусов (вручную вертеть пиксели в массиве было неохота  )
' если нужно будет сохранять изображение средствами Devil, то придется изображение опять поворачивать перед сохранением
iluRotate(180)

' копируем пиксели в буфер изображения FB
ilCopyPixels( 0, 0, 0, w, h, ilGetInteger( IL_IMAGE_DEPTH ), IL_RGBA, IL_UNSIGNED_BYTE, pixdata)
' выводим на экран
Put(10,10),fbImage
Sleep
'' Clean up
ilDeleteImages(1, @fblogo)


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
WQДата: Понедельник, 18.05.2015, 21:34 | Сообщение # 3
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
haav  
Большое спасибо! Все работает. Жаль, что раньше не заметил эту библиотеку.
Правда, размер у скомпилированных файлов%)

Получается так: bmp переворачивает, а jpg, tif, png нет.

Еще потребовалось здесь 

Код
ilCopyPixels( 0, 0, 0, w, h, ilGetInteger( IL_IMAGE_DEPTH ), IL_RGBA, IL_UNSIGNED_BYTE, pixdata)


заменить IL_RGBA на IL_BGRA
 
  • Страница 1 из 1
  • 1
Поиск: