FreeBasic
Главная
Вход
Регистрация
Вторник, 12.11.2024, 21:32Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
GTK и изображения
WQДата: Среда, 20.05.2015, 23:44 | Сообщение # 1
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Пытаюсь работать с GTK под линуксом.
Опять же, нужно открыть картинку и перевести ее в FB-формат.

Написал такой код:
Код
'#include once "gdk-pixbuf.bi"
#include once "gtk/gtk.bi"
Screen 17, 32
gtk_init (NULL, NULL)
Dim As UByte Ptr pixdata,pixels
Dim As Any Ptr fbImage
Dim As Integer pitch, bypp

Var s_pBackground = gdk_pixbuf_new_from_file("1.jpg", NULL)
Var w = gdk_pixbuf_get_width(s_pBackground)
Var h = gdk_pixbuf_get_height(s_pBackground)
pixels = gdk_pixbuf_get_pixels(s_pBackground)
fbImage = ImageCreate(w,h)
ImageInfo(fbImage, w, h, bypp, pitch, pixdata)

'?bypp, pitch, w, h

For y As Integer = 0 To h-1
    Dim row As UInteger Ptr = pixdata + y * pitch
    For x As Integer = 0 To w-1
       row [x]= pixels[x+y*w]       
    Next
Next

Put(10,10),fbImage
Sleep


Но перевод некорректный, хотя форматы того, что получает  gdk_pixbuf_get_pixels, и  ImageCreate вроде совпадают.
 
haavДата: Четверг, 21.05.2015, 12:12 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1372
Репутация: 49
Статус: Offline
Код
#include once "gtk/gtk.bi"

Screen 17, 32

gtk_init (NULL, NULL)

Dim As UByte Ptr pixdata,pixels
Dim As Any Ptr fbImage
Dim As Integer pitch
Dim As UInteger Ptr p

Var s_pBackground = gdk_pixbuf_new_from_file("1.png", NULL)
Var w = gdk_pixbuf_get_width(s_pBackground)
Var h = gdk_pixbuf_get_height(s_pBackground)
pixels = gdk_pixbuf_get_pixels(s_pBackground)
var  nChannels = gdk_pixbuf_get_n_channels(s_pBackground)
var rowstride = gdk_pixbuf_get_rowstride(s_pBackground)

fbImage = ImageCreate(w,h)
ImageInfo(fbImage, ,,, pitch, pixdata)

for y As Integer= 0 to h-1
   Dim row As UInteger Ptr = Cast(UInteger Ptr,pixdata + y * pitch)
   for x As integer= 0 to w-1
    p = Cast(UInteger Ptr,pixels  + x * nChannels + y * rowstride)
    row [x]= *p
    Dim As UByte Ptr ubP = Cast(Ubyte Ptr,@row[x])
    Swap ubP[0],ubP[2]
   Next
Next

Put(10,10),fbImage

Sleep


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
WQДата: Четверг, 21.05.2015, 12:48 | Сообщение # 3
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Спасибо! То, что нужно!
 
  • Страница 1 из 1
  • 1
Поиск: