В приведенном ниже примере функция 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 '--------------------------------------------------------------------------------------------------
Два вопроса - почему всегда вывод идет в угол экрана. И почему глюки при выводе текста 00:00 ?? Кто нибудь может понять причины этого безобразия? :-/ - а это пожалуй третий вопрос :-)
Сообщение отредактировал Бублик_ - Пятница, 02.08.2013, 16:16
Интересно, а ведь реально если он создаёт картинку ImgeCreate вне процедуры...... то координаты в PUT не работают???? Могу только догадываться другая область видимости переменных АА! точно кто же создаёт картинку в памяти при этом не включил графического режима????
Код
#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
Rolover правильно написал. Перед использованием графических функций, необходима инициализация экрана с помощью screen или screenres. В вашем коде функция ImageCreate возвращает 0. И как следствие , вывод происходит напрямую в экранный буфер, а не в буфер myImage.
Цитата (Rolover)
по поводу принта не знаю не скажу ..у меня все выводит правильно
У меня тоже нормально. Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
Чуден Днепр при тихой погоде Спасибо. Действительно работает.
'Testing_bmp.bas #Include "fbgfx.bi"
Dim k As String
Shell "chcp 1251" Screen 21
Dim shared myImage As Any Ptr myImage= Imagecreate( 800, 600 )
'----------------------------------------------------------------------------- 'Вывод изображения из файла *.bmp (при 256 цветах) в заданную область экрана '----------------------------------------------------------------------------- Sub Out_BMP_File(Name_File As String,x As uinteger,y As uinteger) 'Dim As UInteger Len_x,Len_y '???? 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 ' Print 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 '-------------------------------------------------------------------- '==================================================================== Cls
Out_BMP_File("Тest.bmp",50,50)
Print" 1"
Print " Press <Esc> or <Q> to exit.. " Do k = Inkey$ If k = "Q" Or k = "q" Or k = "й" Or k = "Й" Or k = Chr$(27) Then Exit Do Loop
End
Эдак программа будет похожа на слоеный пирог, напичканный подпрограммами.
Print" 1" - искажает символ если набрать <Tab> 1 причем столь безжалостно оператор печати относится похоже только к цифрам
Если поменять местами закомментаренную строку и строку ниже
'Dim As UInteger Len_x, Len_y '???? то программа закрывается сразу после запуска . Непонятно почему.Ну да ладно "Не трогайте лихо пока оно тихо"
Задача приведения изображений к одной палитре сводится к определению расстояния до ближайшей точке палитры в RGB координатах.
В общем то текстовый и графический режимы вывода совмещаются хотя и с некоторым трудом. Что забавно количество позицируемых строк при этом больше 24.
Добавлено (05.08.2013, 11:31) --------------------------------------------- Чуден Днепр при тихой погоде Спасибо. Действительно работает.
#Include "fbgfx.bi"
Dim k As String
Screen 21
Dim shared myImage As Any Ptr myImage= Imagecreate( 800, 600 )
'----------------------------------------------------------------------------- 'Вывод изображения из файла *.bmp (при 256 цветах) в заданную область экрана '----------------------------------------------------------------------------- Sub Out_BMP_File(Name_File As String,x As uinteger,y As uinteger) 'Dim As UInteger Len_x,Len_y '???? 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 ' Print 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 '-------------------------------------------------------------------- '===========================================
Эдак программа будет похожа на слоеный пирог, напичканный подпрограммами. Print" 1" - искажает символ если набрать <Tab> 1 причем столь безжалостно оператор печати относится похоже только к цифрам Если поменять местами закомментаренную строку и строку ниже
'Dim As UInteger Len_x,Len_y '???? то программа закрывается сразу после запуска . Задача приведения изображений к одной палитре сводится к определению расстояния до ближайшей точке палитры.
В общем то текстовый и графический режимы вывода совмещаются хотя и с некоторым трудом. Что забавно количество позицируемых строк при этом больше 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
Print" 1" - искажает символ если набрать 1причем столь безжалостно оператор печати относится похоже только к цифрам
Это косяк FBedit. В другом редакторе (например FBIDE) работает нормально. Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…