FreeBasic
Главная
Вход
Регистрация
Четверг, 28.03.2024, 12:51Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » Не работает вывод из файла PUT(х,y) ,myImage (Глюки при совмещении графического и текстового вывода)
Не работает вывод из файла PUT(х,y) ,myImage
Бублик_Дата: Пятница, 02.08.2013, 15:59 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Offline
В приведенном ниже примере  функция PUT выводит изображение рисуя его с начала экрана в левом верхнем углу. !!!?
Кроме этого вместо 00:00 печатается Н0:00.
Глюк на глюке. Предполагалось  подпрограммой Out_BMP_File(Name_File,x,y) вывести изображения и перед выводом стирать область куда выводится. Не тут то было :-(
Странный выбор номеров цветов Color 197,0 обьясняется тем, что все изображения 256 цветные привязаны к одной палитре и указанные номера палитр наиболее близки к 0,0,0 и 255,255,255 RGB . (Это можно сделать например в PXWiew).

'Testing_bmp.bas
#Include "fbgfx.bi"

Dim shared myImage As Any Ptr
myImage= Imagecreate( 300, 150 )

'--------------------------------------------------------------------------------------------------
' мини подпрограммы для вывода графических изображений
'--------------------------------------------------------------------------------------------------
'Вывод изображения из файла в заданную область экрана
Sub Out_BMP_File(Name_File As String)',x As uinteger,y As uinteger)
Dim As Integer x,y
Dim As Integer Len_x,Len_y
Dim As UByte tmp_xy
x=200
y=200
'Определение размера экрана
Open Name_File For Binary Access Read As #1
GET #1,24,tmp_xy,1
Len_y=tmp_xy*256
GET #1,23,tmp_xy,1
Len_y=Len_y+tmp_xy
GET #1,20,tmp_xy,1
Len_x=256*tmp_xy
GET #1,19,tmp_xy,1
Len_x=Len_x+tmp_xy
Close #1
' Print Len_x,Len_y
Line (x, y)-(Len_x-1+x, Len_y-1+y), 0, bf
BLoad Name_File, myImage
ScreenLock
Put (255,255), myImage
ScreenUnLock
End Sub
'--------------------------------------------------------------------------------------------------

Screen 21
Cls
Out_BMP_File("Test.bmp")',77,70)

Color 197,0
Locate 22,14
Print "Testing"
Print
Print
Print" 00:00 OFF"
Print
Print

Sleep
wacko


Два вопроса - почему всегда вывод идет в угол экрана. И почему глюки при выводе текста 00:00 ??
Кто нибудь может понять причины этого безобразия? :-/ - а это пожалуй третий вопрос :-)


Сообщение отредактировал Бублик_ - Пятница, 02.08.2013, 16:16
 
RoloverДата: Пятница, 02.08.2013, 17:05 | Сообщение # 2
Лейтенант
Группа: Пользователи
Сообщений: 45
Репутация: 0
Статус: Offline
Интересно, а ведь реально если  он создаёт картинку ImgeCreate вне процедуры...... то координаты в PUT не работают???? wink
Могу только догадываться другая область видимости переменных smile
АА! точно кто же создаёт картинку в памяти при этом не включил графического режима????

Код
#Include "fbgfx.bi"
USIng FB
Screen 18,32
Dim shared myImage As Any Ptr
myImage= Imagecreate( 20, 20 ,rgb(255,255,255))

'--------------------------------------------------------------------------------------------------
' мини подпрограммы для вывода графических изображений
'--------------------------------------------------------------------------------------------------
'Вывод изображения из файла в заданную область экрана
Sub Out_BMP_File (Name_File As String)',x As uinteger,y As uinteger)
BLoad (Name_File, myImage)
ScreenLock
Put (155,155), myImage,Trans
ScreenUnLock
End Sub
'--------------------------------------------------------------------------------------------------

Cls
Out_BMP_File("test.bmp")

Color 197,0
Locate 22,14

Sleep


по поводу принта не знаю не скажу ..у меня все выводит правильно


Объяснив другому, поймешь, что понял сам.

Сообщение отредактировал Rolover - Пятница, 02.08.2013, 17:17
 
haavДата: Пятница, 02.08.2013, 18:21 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Привет всем!

Rolover правильно написал. Перед использованием графических функций, необходима инициализация экрана с помощью screen или screenres. В вашем коде функция ImageCreate  возвращает 0. И как следствие , вывод происходит напрямую в экранный буфер, а не в буфер myImage.

Цитата (Rolover)
по поводу принта не знаю не скажу ..у меня все выводит правильно

У меня тоже нормально.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Бублик_Дата: Понедельник, 05.08.2013, 11:34 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Offline
Чуден Днепр при тихой погоде  smile Спасибо. Действительно работает.



Эдак программа будет похожа на слоеный пирог,  напичканный подпрограммами.

Print"   1" - искажает символ если набрать <Tab> 1
причем столь безжалостно оператор печати относится похоже только к цифрам smile

Если поменять местами закомментаренную строку и строку ниже

'Dim As UInteger Len_x, Len_y '????
то программа закрывается сразу после запуска wacko .
Непонятно почему. Ну да ладно "Не трогайте лихо пока оно тихо"

Задача приведения изображений к одной палитре сводится к определению расстояния  до ближайшей точке палитры в RGB координатах.

В общем то текстовый и графический режимы вывода совмещаются хотя и с некоторым трудом.
Что забавно количество позицируемых строк при этом больше 24.

Добавлено (05.08.2013, 11:31)
---------------------------------------------
Чуден Днепр при тихой погоде  smile Спасибо. Действительно работает.

    



Эдак программа будет похожа на слоеный пирог,  напичканный подпрограммами.
Print"   1" - искажает символ если набрать <Tab> 1
причем столь безжалостно оператор печати относится похоже только к цифрам smile
Если поменять местами закомментаренную строку и строку ниже

 'Dim As UInteger Len_x,Len_y '????
то программа закрывается сразу после запуска wacko .
Задача приведения изображений к одной палитре сводится к определению расстояния  до ближайшей точке палитры.

В общем то текстовый и графический режимы вывода совмещаются хотя и с некоторым трудом.
Что забавно количество позицируемых строк при этом больше 24.

Добавлено (05.08.2013, 11:34)
---------------------------------------------
Ну вот никакой внимательности нету, правильнее так
'-----------------------------------------------------------------------------
'Вывод изображения из файла *.bmp (при 256 цветах) в заданную область экрана
'-----------------------------------------------------------------------------
Sub Out_BMP_File(Name_File As String,x As uinteger,y As uinteger)
Dim As UInteger Len_y,Len_x
'Определение размера изображения
Open Name_File For Binary Access Read As #1
'чтение размера изображения
Get #1,19,Len_x,2
Get #1,23,Len_y,2
Close #1

Dim myImage As Any Ptr
myImage= Imagecreate( Len_x, Len_y )

Line (x, y)-(Len_x-1+x, Len_y-1+y), 0, bf

BLoad Name_File, myImage
ScreenLock
Put (x, y), myImage ', Trans
ScreenUnLock

End Sub
'--------------------------------------------------------------------


Сообщение отредактировал Бублик_ - Понедельник, 05.08.2013, 10:02
 
haavДата: Понедельник, 05.08.2013, 12:48 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата (Бублик_)
Print" 1" - искажает символ если набрать 1причем столь безжалостно оператор печати относится похоже только к цифрам

Это косяк FBedit. В другом редакторе (например FBIDE) работает нормально.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Форум » Freebasic » Вопросы по языку FreeBasic » Не работает вывод из файла PUT(х,y) ,myImage (Глюки при совмещении графического и текстового вывода)
  • Страница 1 из 1
  • 1
Поиск: