purebasic.info

PureBasic forum
Текущее время: Ср сен 19, 2018 8:47 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 51 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вс июн 23, 2013 4:40 pm 
Не в сети
док

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 168
Благодарил (а): 92 раз.
Поблагодарили: 5 раз.
Пункты репутации: 0
совсем не в теме, но ясность внесу)
думаю, для графики надо использовать готовые библиотеки (dll), свободные фильты от фотошопа и т.п. Одинаковые либы используют разные редакторы (как разные аудиоплееры используют одну и ту же либу bass). Тот же IrfanView использует сторонние плагины для работы с разными типами файлов, где есть и вращение\поворот и некоторые эффекты


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 24, 2013 12:46 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2285
Откуда: Russia — Belarus
Благодарил (а): 6 раз.
Поблагодарили: 72 раз.
Пункты репутации: 11
bizdon, да, вариант стоящий, вот например, есть эта штука:
http://freeimage.sourceforge.net/
Как обычно, есть множество официальных примеров/враперов для различных ЯП, но конечно же PB в этом списке нет :(.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 24, 2013 9:07 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6382
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
qpAHToMAS писал(а):
Как обычно, есть множество официальных примеров/враперов для различных ЯП, но конечно же PB в этом списке нет

А если поискать? К примеру
http://www.purearea.net/pb/download/dll/RWFreeImage.zip

Версия DLL там конечно не самая новая, но принцип тот же. Потом есть возможность сделать при помощи PureDLLHelper враппер самому. Я затратил пару минут на это дело, всё работает
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
IncludeFile "FreeIm.pbi"
 
PNG_Z_BEST_COMPRESSION.l = 9
 
;FREE_IMAGE_JPEG_OPERATION
   FIJPEG_OP_NONE = 0        ; no transformation
   FIJPEG_OP_FLIP_H = 1      ; horizontal flip
   FIJPEG_OP_FLIP_V = 2      ; vertical flip
   FIJPEG_OP_TRANSPOSE = 3   ; transpose across UL-To-LR axis
   FIJPEG_OP_TRANSVERSE = 4  ; transpose across UR-To-LL axis
   FIJPEG_OP_ROTATE_90 = 5   ; 90-degree clockwise rotation
   FIJPEG_OP_ROTATE_180 = 6  ; 180-degree rotation
   FIJPEG_OP_ROTATE_270 = 7  ; 270-degree clockwise (Or 90 ccw)
   
   
   ; загрузка изображений в ImageGadget и подобные гаджеты через ж-у :)
   
   Procedure GetID(FIBITMAP.l)
     hdc = GetDC_(#Null)
     GetID=CreateDIBitmap_(hdc, FreeImage_GetInfoHeader(FIBITMAP), #CBM_INIT, FreeImage_GetBits(FIBITMAP), FreeImage_GetInfo(FIBITMAP), #DIB_RGB_COLORS)
     ReleaseDC_(#Null, hdc);
     ProcedureReturn GetID
   EndProcedure
   
   
   
OpenWindow(0, 0, 0, 1100, 800, "FreeImage_DLL", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 
 
Define  dib.l,bOK.l
  If FreeImage_LoadDLL()
  ; Load a tif image
  dib = FreeImage_Load(FIF_JPEG, @"Tiger.jpg", 0)
 
   
  ImageGadget(0, 1, 1, FreeImage_GetWidth(dib), FreeImage_GetHeight(dib),  GetID(dib), #PB_Image_Border)
 
 
  Delay(3000)
 
  If FreeImage_GetBPP(dib)=24 Or FreeImage_GetBPP(dib)=32
    color = RGB(255, 255, 255);
    dib1=FreeImage_Rotate(dib,180,@color )
    SetGadgetState(0,GetID(dib1))
    Debug "По задумке изображение должно перевернутся"
  ; если не работает, то проверить как задан прототип
  ; FreeImage_Rotate(a.l, b.d, c.l) - обязательно типы в соответствии
  EndIf
 
   ; А вот этот поворот работает, как и все трансформации JPEG_OPERATION
  ;FreeImage_JPEGTransform(@"Tiger.jpg", @"TigerTr.jpg",FIJPEG_OP_ROTATE_180 ,0)
  ;dib1 = FreeImage_Load(FIF_JPEG, @"TigerTr.jpg", 0)
  ;SetGadgetState(0,GetID(dib1))
 
 
 
  ; Save this image As PNG
  bOK = FreeImage_Save(FIF_PNG, dib, @"Tiger.png", PNG_Z_BEST_COMPRESSION) ; долго сжимает!
  ; Unload the dib  
  FreeImage_Unload (dib)
 
 
EndIf
 
Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
 
 



IncludeFile "FreeIm.pbi" не ложу тут - длинный, а делается из DLL ровно 5 секунд.
Все константы есть в примере на VB, файл MFreeImage.bas

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 26, 2013 7:33 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс дек 09, 2012 9:02 pm
Сообщений: 771
Откуда: Дагестан
Благодарил (а): 0 раз.
Поблагодарили: 11 раз.
Пункты репутации: 0
Цитата:
IncludeFile "FreeIm.pbi" не ложу тут - длинный, а делается из DLL ровно 5 секунд.
Как делается?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 26, 2013 7:48 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6382
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
mestnyi писал(а):
Как делается?

при помощи PureDLLHelper

Уже выложил готовый в этой теме

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 10, 2013 7:05 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Ср май 08, 2013 10:51 am
Сообщений: 621
Откуда: Новотроицк
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
qpAHToMAS
может вместо канваса использовать Sprite гаджеты?

_________________
Порядок необходим глупцам, гений же властвует над хаосом(А.Эйнштейн ©)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 11, 2013 4:22 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2285
Откуда: Russia — Belarus
Благодарил (а): 6 раз.
Поблагодарили: 72 раз.
Пункты репутации: 11
Владислав писал(а):
qpAHToMAS
может вместо канваса использовать Sprite гаджеты?

Зачем? Что бы программа весила на порядок больше и требовала DirectX/OpenGL?
С отрисовкой проблем нет никаких, она даже вызывается только по требованию, а вот с загрузкой файлов и другим функционалом — есть.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PBViewer (сырой Image Viewer)
СообщениеДобавлено: Вс май 25, 2014 1:33 pm 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 669
Благодарил (а): 75 раз.
Поблагодарили: 20 раз.
Пункты репутации: 5
kvitaliy писал(а):
Я обычно пользую IrfanView

Я тоже ни чего лучше не нашёл, разве что ирфан сам танцевать не умеет, девки за него пляшут.
Это я к тому, что после ирфана делать просмотрщик можно только ради собственного интереса. ИМХО.


P.S.
А на фотках твоя дачка?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PBViewer (сырой Image Viewer)
СообщениеДобавлено: Вс май 25, 2014 6:12 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2285
Откуда: Russia — Belarus
Благодарил (а): 6 раз.
Поблагодарили: 72 раз.
Пункты репутации: 11
newJS писал(а):
А на фотках твоя дачка?

На фото г.Минск.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PBViewer (сырой Image Viewer)
СообщениеДобавлено: Вс май 25, 2014 6:52 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
qpAHToMAS, а если для скорости подгружать 3-5 изо впереди и сзади, тоесть то что на экране это середина, а в памяти уже хранятся 3 изо влево и 3 вправо, подгрузка новых в отдельном потоке.
Если файлы с незвестным расширением игнорить, например txt bat просто сравнить расширение и не читать.

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PBViewer (сырой Image Viewer)
СообщениеДобавлено: Вс май 25, 2014 10:39 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2285
Откуда: Russia — Belarus
Благодарил (а): 6 раз.
Поблагодарили: 72 раз.
Пункты репутации: 11
m0t0d0r писал(а):
qpAHToMAS, а если для скорости подгружать 3-5 изо впереди и сзади, тоесть то что на экране это середина, а в памяти уже хранятся 3 изо влево и 3 вправо, подгрузка новых в отдельном потоке.
Если файлы с незвестным расширением игнорить, например txt bat просто сравнить расширение и не читать.

Да, так и надо делать, только до этого руки не дошли.
+ надо детектить момент, когда юзер быстро листает изображения, что бы входить в режим, когда программа за место самих изображений грузит превьюшки из них (JPG по кр. мере).

m0t0d0r писал(а):
qpAHToMASЕсли файлы с незвестным расширением игнорить, например txt bat просто сравнить расширение и не читать.

Для расширенного функционала надо уметь читать заголовок файла и проверять, изображение ли это. Жаль, что PB так не умеет, и это надо кодить вручную.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PBViewer (сырой Image Viewer)
СообщениеДобавлено: Вс май 25, 2014 11:14 pm 
Не в сети
лентяй ужасный
Аватар пользователя

Зарегистрирован: Вс фев 27, 2011 4:23 pm
Сообщений: 646
Благодарил (а): 4 раз.
Поблагодарили: 5 раз.
qpAHToMAS писал(а):
Для расширенного функционала надо уметь читать заголовок файла и проверять, изображение ли это. Жаль, что PB так не умеет, и это надо кодить вручную.

Осталось только собрать базу идентификатов каждого формата. Ну или через CompareMemory(), может даже быстрее будет-
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
Procedure.s DetectEXT(FileId)
  EXT.u=0
  ReadData(0, @EXT, 2)
  Select EXT
    Case PeekU(?BMP):ProcedureReturn "BMP"
    Case PeekU(?JPG):ProcedureReturn "JPEG"
    Case PeekU(?GIF):ProcedureReturn "GIF"  
    Case PeekU(?TIFF):ProcedureReturn "Tiff"
    Case PeekU(?TIFF2):ProcedureReturn "TiffMM"
    Default: ProcedureReturn "Not an image file"
  EndSelect
EndProcedure
 
If ReadFile(0, "C:\gif.gif")
  Debug DetectEXT(0)
EndIf
 
DataSection    
  BMP: Data.b  $4D, $42, $00
  JPG: Data.b  $FF, $D8, $00
  GIF: Data.b  $47, $49, $00
  TIFF:Data.b  $49, $49, $00
  TIFF2:Data.b $4D, $4D, $00
EndDataSection
 



Последний раз редактировалось newww Пн май 26, 2014 9:24 am, всего редактировалось 3 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PBViewer (сырой Image Viewer)
СообщениеДобавлено: Вс май 25, 2014 11:41 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Хм, интересный вариант :) я бы не додумался в дата секцию засунуть, +1

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PBViewer (сырой Image Viewer)
СообщениеДобавлено: Вс май 25, 2014 11:47 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Зачем в этом случае датасекция и строки? Данные помещаются в двухбайтовую переменную и нет смысла так все усложнять.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: PBViewer (сырой Image Viewer)
СообщениеДобавлено: Пн май 26, 2014 12:09 am 
Не в сети
лентяй ужасный
Аватар пользователя

Зарегистрирован: Вс фев 27, 2011 4:23 pm
Сообщений: 646
Благодарил (а): 4 раз.
Поблагодарили: 5 раз.
Пётр писал(а):
Зачем в этом случае датасекция и строки? Данные помещаются в двухбайтовую переменную и нет смысла так все усложнять.

Делаем так, как умеем.
На счет строк полностью согласен, но уже не охото было переписывать :/
А вот насчет переменной не знаю. Я пока только так писать могу, но это уже 3 строчки вместо одной. Конечно можно, числом или еще как то в одну уместиться, но это будет не так информативно, имхо.
Научи, может есть более продвинутые методы работы с байтами.

Вот такой вариант записи (*bmp = {$4D, $42,, $FF ...}) был бы вообще идеальный, но увы пока такого нет, и приходиться над каждым байтом кряхтеть.
Код:
1
2
3
4
 
Define bmp.u
PokeU(@bmp, $4D42)
 



Никита Однороб писал(а):
Хм, интересный вариант, я бы не додумался в дата секцию засунуть, +1

Значит не приходилось с байтами в пб работать, счасливчик :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 51 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB