Screen grabber in Alaska

This forum is for eXpress++ general support.
Message
Author
User avatar
Eugene Lutsenko
Posts: 1649
Joined: Sat Feb 04, 2012 2:23 am
Location: Russia, Southern federal district, city of Krasnodar
Contact:

Re: Screen grabber in Alaska

#21 Post by Eugene Lutsenko »

Auge_Ohr wrote:hi,

i wonder how it work with oPS while you have not assign it ?

Code: Select all

line 288
graSetAttrLine( oPS, aAttr )
p.s. SetPixel "draw" into hDC not Presentationspace.
PUBLIC oFont, oPS := oStatic:lockPs()

Code: Select all

FUNCTION GraTest( oStatic )

PUBLIC oFont, oPS := oStatic:lockPs()

oFont := XbpFont():new( oPS ):create()
oFont:configure('16.Arial Bold')
GraSetFont( oPS, oFont )

****** Задать атрибуты линии

*aAttr := Array( GRA_AL_COUNT )                         // Массив для атрибутов линии  
*aAttr [ GRA_AL_TYPE  ] := GRA_LINETYPE_DEFAULT
*aAttr [ GRA_AL_COLOR ] := GRA_CLR_RED                  // Задать цвет    линии
*aAttr [ GRA_AL_WIDTH ] := 3                            // Задать толщину линии
*graSetAttrLine( oPS, aAttr )                  

*GraBox( oPS, {30,80}, {200,130 } )
*GraLine( oPS, {30,80}, {200,130 } )
*GraStringAt( oPS, {50,100}, 'This is a test' )

*oStatic:unlockPs()

RETURN nil
[/size]

Code: Select all

***********************************************************************************************************
******** Геокогнитивная система. Преобразует 2D Excel-таблицу с именем "Inp_map.xls" в файл "Inp_data.xls",
******** содержащий координаты X,Y,Z точек и их признаки (модель описательной информации картографической
******** базы данных). Визуализирует 2D Excel-таблицу или итоговые результаты распознавания (данные из БД:
******** "Rsp_it.dbf") в картографической форме с применением триангуляции Делоне
***********************************************************************************************************
FUNCTION F4_8(mTitle)

PUBLIC GetList[0], GetOptions, oSay, hDC1, hDC2, oStatic, oStatic1, aPixel

*DC_IconDefault(1000)

IF M_KodAdmAppls = 0    // Выйти из системы если нет авторизации
   LB_Warning("Вы не авторизовались в системе (режим 1.1) и не можете ей пользоваться!")
   RETURN NIL
ENDIF

****** Узнать разрешение экрана и не показывать изображений большой размерности ****************

nWidth  := AppDeskTop():currentSize()[1] // current screen size width  in pixels
nHeight := AppDeskTop():currentSize()[2] // current screen size height in pixels

IF nWidth  < 1800
   aMess := {}
   AADD(aMess, "Для правильного отображения графической формы")
   AADD(aMess, "необходимо разрешение экрана 1800 pix по горизонтали,")
   AADD(aMess, "а фактически установлено: "+ALLTRIM(STR(nWidth))+" pix")
   LB_Warning(aMess )
   ReTURN NIL
ENDIF
IF nHeight < 850
   aMess := {}
   AADD(aMess, "Для правильного отображения графической формы")
   AADD(aMess, "необходимо разрешение экрана 850 pix по вертикали,")
   AADD(aMess, "а фактически установлено: "+ALLTRIM(STR(nHeight))+" pix")
   LB_Warning(aMess )
   ReTURN NIL
ENDIF
************************************************************************************************

*********** Формирование массива точек

mCount = 100000
*PUBLIC aX[100000], aY[100000], aZ[100000]                                        // Координаты X,Y,Z точек облака
PUBLIC TrianglesP1[100000], TrianglesP2[100000], TrianglesP3[100000]              // Массивы номеров точек вершин треугольников
PUBLIC RibsP1[100000], RibsP2[100000], RibsSide[100000]                           // Массивы номеров точек концов ребер
PUBLIC TrianglesCount:=0, RibsCount:=0, PointsCount:=0                            // Кол-во треугольников, ребер, точек
PUBLIC mFlagCircle:=.F., mFlagRibs:=.T., mFlagsquare:=.T.                         // Флаги - рисовать ли окружности, рисовать ли ребра в градиентной цветовой заливке, квадратное ли поле рисования
PUBLIC aTriangleID:={}, mTriangleID, aRibID:={}, mRibID                           // Массив ID созданных треугольников (ID - рассортированный массив номеров точек вершин) и ребер

*PUBLIC X_MaxW := 1920, Y_MaxW := 910                                             // Размер графического окна для самого графика в пикселях
 PUBLIC X_MaxW := 1800, Y_MaxW := 850                                             // Размер графического окна для самого графика в пикселях

PUBLIC nXSize := X_MaxW                                                           // Размер изображения в пикселях
PUBLIC nYSize := Y_MaxW                           

 StrFile(STR(nXSize,9)+' '+STR(nYSize,9), '_XYSize.txt')          // Запись текстового файла с параметрами nXSize, nYSize
*nXSize = VAL(SUBSTR(FileStr('_XYSize.txt'), 1,9))                // Загрузка параметра nXSize из текстового файла
*nYSize = VAL(SUBSTR(FileStr('_XYSize.txt'),11,9))                // Загрузка параметра nYSize из текстового файла

*AFILL(aX,0)
*AFILL(aY,0)
*AFILL(aZ,0)

AFILL(RibsP1,0)
AFILL(RibsP2,0)
AFILL(RibsSide,0)

AFILL(TrianglesP1,0)
AFILL(TrianglesP2,0)
AFILL(TrianglesP3,0)


** Имя графического файла для рисования

DO CASE
   CASE FILE('Delone.bmp')
        mFileName = 'Delone.bmp'
   CASE FILE('Delone.jpg')
        mFileName = 'Delone.jpg'
   OTHERWISE
        LB_Warning( 'В текущей папке системы'+Disk_dir+' должен быть файл: "Delone.bmp" или "Delone.jpg" 1800 x 850 pix', mTitle )
        RETURN nil
ENDCASE

*H = 20 // Высота кнопки в pix
H = 1.5 // Высота кнопки
W =  8  // Ширина кнопки
D =  2  // Расстояние между кнопками

@ 0,0 DCSTATIC TYPE XBPSTATIC_TYPE_BITMAP CAPTION mFileName OBJECT oStatic1 ;
      PREEVAL {|o|o:autoSize := .t.} EVAL {|o|hDC1 := GetWindowDC(o:getHWnd()), o:motion := {|a,b,o|ShowColorTr( hDC1, a, oSay, o )},;
      aPixel := Array(o:caption:xSize,o:caption:ySize), o:paint := {|a,b,o|Gratest(o)}}

*** Группа-2 ***************************
mk1 ='Помощь'                           
mk2 ='Очистка'                          
mk3 ='Формирование облака точек'        
mk4 ='Триангуляция ("Сетка")'           
mk5 ='Триангуляция ("Градиентный цвет")'
mk6 ='Генерация изображений символов'   
mk7 ='Цветовое зонирование'             
*** Группа-3 ***************************
mk8 ='По пикселям'                      
mk9 ='По контурам'                     
*** Группа-4 *************************** 
mk10='Помощь'                
mk11='Подготовка данных'                
mk12='Изображения и спектры объектов'     
mk13='Изображения и спектры классов'     

gr2 = LEN(mk1+mk2+mk3+mk4+mk5+mk6+Mk7)
gr3 = LEN(mk8+mk9)
gr4 = LEN(mk10+mk11+mk12+mk13)

@ 1,0 DCGROUP oGroup1 CAPTION ''                                                       SIZE gr2+gr3+gr4+10.5, 5.0             

@ 0.5,1      DCGROUP oGroup2 CAPTION '4.8. Геокогнитивная подсистема системы "Эйдос":' SIZE gr2-0.5, 4.0     PARENT oGroup1
@ 1.5,1                    DCPUSHBUTTON CAPTION mk1  SIZE LEN(mk1)+3 , H ACTION {||Help48()}                 PARENT oGroup2
@ DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION mk2  SIZE LEN(mk2)+2 , H ACTION {||ClearImageTr()}           PARENT oGroup2
@ DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION mk3  SIZE LEN(mk3)-1 , H ACTION {||GetPoints()}              PARENT oGroup2
@ DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION mk4  SIZE LEN(mk4)-2 , H ACTION {||Triangulation(.T.)}       PARENT oGroup2
@ DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION mk5  SIZE LEN(mk5)-4 , H ACTION {||Shading(.T.)}             PARENT oGroup2
@ DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION mk6  SIZE LEN(mk6)-3 , H ACTION {||ParGenSimb('Ok')}         PARENT oGroup2
@ DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION mk7  SIZE LEN(mk7)-1 , H ACTION {||ColorZone(hDC1,aPixel)}   PARENT oGroup2

@ 0.5,gr2+2  DCGROUP oGroup3 CAPTION '4.7. АСК-анализ изображений:'                    SIZE gr3+gr4+6.5,4.0  PARENT oGroup1
@ 1.5,1                    DCPUSHBUTTON CAPTION mk8  SIZE LEN(mk8)+1 , H ACTION {||F4_7()}                   PARENT oGroup3
@ DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION mk9  SIZE LEN(mk9)+1 , H ACTION {||Contouring(hDC1,aPixel)}  PARENT oGroup3

@ 0.5,gr3+4  DCGROUP oGroup4 CAPTION 'По спектрам:'                                    SIZE gr4+0.5, 3.0     PARENT oGroup3
@ 1.0,1                    DCPUSHBUTTON CAPTION mk10 SIZE LEN(mk10)+2, H ACTION {||Help47()}                 PARENT oGroup4
@ DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION mk11 SIZE LEN(mk11)-0, H ACTION {||F2_3_2_5()}               PARENT oGroup4
@ DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION mk12 SIZE LEN(mk12)-2, H ACTION {||SpectrView2325()}         PARENT oGroup4
@ DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION mk13 SIZE LEN(mk13)-3, H ACTION {||SpectrViewCls()}          PARENT oGroup4

******* Отладочные режимы *********************
*@DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION 'Информационные портреты'            SIZE 200, H ACTION {||InfPortSimbKon()}
*@DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION 'Создание приложения (2.3.2.2)'      SIZE 210, H ACTION {||F2_3_2_2("")}
*@DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION 'Синтез геокогнитивной модели (3.4)' SIZE 220, H ACTION {||F3_4(.T., 0, 0, 0, .T.,"")}
*@DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION 'Распознавание объектов (4.1.2)'     SIZE 210, H ACTION {||F4_1_2(4,.T.,"4_8")}
*@DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION 'Поиск 1-го ребра'                   SIZE 150, H ACTION {||FindFirstRib(.T.)}
*@DCGUI_ROW, DCGUI_COL + D DCPUSHBUTTON CAPTION 'Тест станд.графики'                 SIZE 160, H ACTION {||Gratest(oStatic1)}

*DCGETOPTIONS PIXEL

DCREAD GUI FIT TITLE mTitle OPTIONS GetOptions ;
   EVAL {||GraTest(oStatic1)} SETAPPWINDOW

CLOSE ALL

RETURN NIL
*****************************************************************************
[/size]


Code: Select all

************************************************************************************************************************
FUNCTION GetPoints()

PUBLIC GetList[0], mRegim := 0, nModel := 1, nRasp := 1, nKrit := 1, mNumColumn := 3, mTrend := 1
PUBLIC PointsCount := 100, TurnovCount := 5, MarkPoints := 1, OutRadius:=100, InnRadius:=10    // Параметры по умолчанию

   s = 1
   d = 0.85

   @0, 0 DCGROUP oGroup1 CAPTION 'Задайте способ формирования базы облака точек: "Points_XYZ"' SIZE 135.0, 22.0

   @s, 2 DCRADIO mRegim VALUE  0 PROMPT 'Когнитивные функции, данные из моделей приложения'    PARENT oGroup1;s1=s-1;s=s+d   // Стереть файлы: _ColumnNames.arx и _482.txt
                                                                                                                     s=s+d
   @s, 2 DCRADIO mRegim VALUE  1 PROMPT 'Генерация случайным образом'                          PARENT oGroup1;s1=s-1;s=s+d   // Стереть файлы: _ColumnNames.arx и _482.txt
   @s, 2 DCRADIO mRegim VALUE  2 PROMPT 'Цветовое кольцо (круг)'                               PARENT oGroup1;s2=s-1;s=s+d   // Стереть файлы: _ColumnNames.arx и _482.txt
   @s, 2 DCRADIO mRegim VALUE  3 PROMPT 'Цветовая обобщенная спираль Архимеда'                 PARENT oGroup1;s3=s-1;s=s+d   // Стереть файлы: _ColumnNames.arx и _482.txt
   @s, 2 DCRADIO mRegim VALUE  4 PROMPT 'Цветовая логарифмическая спираль'                     PARENT oGroup1;s4=s-1;s=s+d   // Стереть файлы: _ColumnNames.arx и _482.txt
                                                                                                                     s=s+d
   @s, 2 DCRADIO mRegim VALUE  5 PROMPT 'Координаты и цвета точек из графического файла'       PARENT oGroup1;s5=s-1;s=s+d   // Стереть файлы: _ColumnNames.arx и _482.txt
                                                                                                                     s=s+d
   @s, 2 DCRADIO mRegim VALUE  6 PROMPT 'Из 1d Excel-таблицы исходных данных: "Inp_map1.xls"'  PARENT oGroup1;s6=s-1;s=s+d   // Записать файлы: _ColumnNames.arx и _482.txt
   @s, 2 DCRADIO mRegim VALUE  7 PROMPT 'Из распознаваемой  1d Excel-таблицы: "Rsp_map1.xls"'  PARENT oGroup1;s7=s-1;s=s+d   // Записать файлы: _ColumnNames.arx и _482.txt
                                                                                                                     s=s+d
   @s, 2 DCRADIO mRegim VALUE  8 PROMPT 'Из 2d Excel-таблицы исходных данных: "Inp_map2.dbf"'  PARENT oGroup1;s8=s-1;s=s+d   // Стереть файлы: _ColumnNames.arx и _482.txt
   @s, 2 DCRADIO mRegim VALUE  9 PROMPT 'Из распознаваемой  2d Excel-таблицы: "Rsp_map2.dbf"'  PARENT oGroup1;s9=s-1;s=s+d   // Стереть файлы: _ColumnNames.arx и _482.txt
                                                                                                                     s=s+d
   @s, 2 DCRADIO mRegim VALUE 10 PROMPT 'Из базы исходных данных:   "Inp_data.dbf"'            PARENT oGroup1;s10=s-1;s=s+d  // Записать файл: _482.txt
   @s, 2 DCRADIO mRegim VALUE 11 PROMPT 'Из распознаваемой выборки: "Inp_rasp.dbf"'            PARENT oGroup1;s11=s-1;s=s+d  // Записать файл: _482.txt
   @s, 2 DCRADIO mRegim VALUE 12 PROMPT 'Из итоговых результатов распознавания: "Rsp_IT.dbf"'  PARENT oGroup1;s12=s-1;s=s+d  // Записать файл: _483.txt
                                                                                                                      s=s+d
   @s, 2 DCCHECKBOX mFlagCircle  PROMPT 'Рисовать окружности?'                                 PARENT oGroup1;s=s+d
   @s, 2 DCCHECKBOX mFlagRibs    PROMPT 'Рисовать ребра в цветовой заливке?'                   PARENT oGroup1;s=s+d
   @s, 2 DCCHECKBOX mFlagsQuare  PROMPT 'Квадратное поле рисования (Xmax=Ymax)?'               PARENT oGroup1;s=s+d

   ***** Параметры ****************************************************************************************************************
   *-------------------------------------------------------------------------------------------------------------------------------
   IF ApplChange("")  // Перейти в папку выбранного приложения или выйти из системы
      LB_Warning("Необходимо задать (выбрать) хотя бы одно текущее приложение !!!")
      RETURN NIL
   ENDIF

   CLOSE ALL
   USE Class_Sc EXCLUSIVE NEW
   USE Opis_Sc  EXCLUSIVE NEW

   SELECT Class_Sc
   DBGOTOP()   ;mKodClSc1 = Kod_ClSc
   DBGOBOTTOM();mKodClSc2 = Kod_ClSc

   SELECT Opis_Sc
   DBGOTOP()   ;mKodOpSc1 = Kod_OpSc
   DBGOBOTTOM();mKodOpSc2 = Kod_OpSc

   d1 = 48
   d2 = 62
   PUBLIC mCurrInf := 6

   @s1-1,50 DCGROUP oGroup2 CAPTION 'Задайте модель и диапазоны шкал когнитивных функций:'  SIZE 83,20.5 HIDE {||.NOT.mRegim=0} PARENT oGroup1

     s=1
     d=0.85
   @ s,2 DCRADIO mCurrInf VALUE  1 PROMPT '1. ABS  - частный критерий: количество встреч сочетаний: "класс-признак" у объектов обуч.выборки' EDITPROTECT {||.NOT.mRegim=0} HIDE {||.NOT.mRegim=0} PARENT oGroup2;s=s+d
   @ s,2 DCRADIO mCurrInf VALUE  2 PROMPT '2. PRC1 - частный критерий: усл. вероятность i-го признака среди признаков объектов j-го класса ' EDITPROTECT {||.NOT.mRegim=0} HIDE {||.NOT.mRegim=0} PARENT oGroup2;s=s+d
   @ s,2 DCRADIO mCurrInf VALUE  3 PROMPT '3. PRC2 - частный критерий: условная вероятность i-го признака у объектов j-го класса           ' EDITPROTECT {||.NOT.mRegim=0} HIDE {||.NOT.mRegim=0} PARENT oGroup2;s=s+1.2*d
   @ s,2 DCRADIO mCurrInf VALUE  4 PROMPT '4. INF1 - частный критерий: количество знаний по А.Харкевичу; вероятности из PRC1               ' EDITPROTECT {||.NOT.mRegim=0} HIDE {||.NOT.mRegim=0} PARENT oGroup2;s=s+d
   @ s,2 DCRADIO mCurrInf VALUE  5 PROMPT '5. INF2 - частный критерий: количество знаний по А.Харкевичу; вероятности из PRC2               ' EDITPROTECT {||.NOT.mRegim=0} HIDE {||.NOT.mRegim=0} PARENT oGroup2;s=s+d
   @ s,2 DCRADIO mCurrInf VALUE  6 PROMPT '6. INF3 - частный критерий: Xи-квадрат, разности между фактическими и ожидаемыми абс.частотами  ' EDITPROTECT {||.NOT.mRegim=0} HIDE {||.NOT.mRegim=0} PARENT oGroup2;s=s+d
   @ s,2 DCRADIO mCurrInf VALUE  7 PROMPT '7. INF4 - частный критерий: ROI (Return On Investment); вероятности из PRC1                     ' EDITPROTECT {||.NOT.mRegim=0} HIDE {||.NOT.mRegim=0} PARENT oGroup2;s=s+d
   @ s,2 DCRADIO mCurrInf VALUE  8 PROMPT '8. INF5 - частный критерий: ROI (Return On Investment); вероятности из PRC2                     ' EDITPROTECT {||.NOT.mRegim=0} HIDE {||.NOT.mRegim=0} PARENT oGroup2;s=s+d
   @ s,2 DCRADIO mCurrInf VALUE  9 PROMPT '9. INF6 - частный критерий: разн.усл.и безусл.вероятностей; вероятности из PRC1                 ' EDITPROTECT {||.NOT.mRegim=0} HIDE {||.NOT.mRegim=0} PARENT oGroup2;s=s+d
   @ s,2 DCRADIO mCurrInf VALUE 10 PROMPT '10.INF7 - частный критерий: разн.усл.и безусл.вероятностей; вероятности из PRC2                 ' EDITPROTECT {||.NOT.mRegim=0} HIDE {||.NOT.mRegim=0} PARENT oGroup2;s=s+1.7*d

   @ s   , 5 DCSAY 'Коды начальной и конечной классификационных шкал:'                         HIDE {||.NOT.mRegim=0} PARENT oGroup2
   @ s   ,d1 DCGET mKodClSc1 PICTURE "#########"                EDITPROTECT {||.NOT.mRegim=0}  HIDE {||.NOT.mRegim=0} PARENT oGroup2
   @ s   ,d2 DCGET mKodClSc2 PICTURE "#########"                EDITPROTECT {||.NOT.mRegim=0}  HIDE {||.NOT.mRegim=0} PARENT oGroup2;s=s+1.2*d

   @ s   , 5 DCSAY 'Код начальной и конечной описательных шкал:'                               HIDE {||.NOT.mRegim=0} PARENT oGroup2
   @ s   ,d1 DCGET mKodOpSc1 PICTURE "#########"                EDITPROTECT {||.NOT.mRegim=0}  HIDE {||.NOT.mRegim=0} PARENT oGroup2
   @ s   ,d2 DCGET mKodOpSc2 PICTURE "#########"                EDITPROTECT {||.NOT.mRegim=0}  HIDE {||.NOT.mRegim=0} PARENT oGroup2;s=s+1.7*d

   str1 = 'Пояснение по когнитивным функциям'    
   str2 = 'Ссылки на публикации по когн.функциям' 
   str3 = 'Подборка публ.по когнит. функциям'
   str4 = 'Подборку публ.по управл. знаниями'
   @ s,  5 DCPUSHBUTTON CAPTION str1 SIZE LEN(str2), 1.1 HIDE {||.NOT.mRegim=0} PARENT oGroup2 ACTION {||Help48CognFun()}
   @ s, 45 DCPUSHBUTTON CAPTION str3 SIZE LEN(str3), 1.1 HIDE {||.NOT.mRegim=0} PARENT oGroup2 ACTION {||DC_SpawnUrl("http://lc.kubagro.ru/Install_Aidos-X/PublCognFun.rar")};s=s+1.3*d
   @ s,  5 DCPUSHBUTTON CAPTION str2 SIZE LEN(str2), 1.1 HIDE {||.NOT.mRegim=0} PARENT oGroup2 ACTION {||Publ_CognFun()}
   @ s, 45 DCPUSHBUTTON CAPTION str4 SIZE LEN(str4), 1.1 HIDE {||.NOT.mRegim=0} PARENT oGroup2 ACTION {||DC_SpawnUrl("http://lc.kubagro.ru/Install_Aidos-X/PublUprZn.rar")};s=s+1.7*d

     a=1
     mCognFun = 3
   @ s,2 DCGROUP oGroup3 CAPTION 'Какие когнитивные функции отображать:'  SIZE 79,4.5 HIDE {||.NOT.mRegim=0} PARENT oGroup2
   @ a,2 DCRADIO mCognFun VALUE  1 PROMPT '1. Только позитивные (точки максимума кол-ва информации в знач.аргумента о знач.функции)' EDITPROTECT {||.NOT.mRegim=0} HIDE {||.NOT.mRegim=0} PARENT oGroup3;a=a+d
   @ a,2 DCRADIO mCognFun VALUE  2 PROMPT '2. Только негативные (точки минимума  кол-ва информации в знач.аргумента о знач.функции)' EDITPROTECT {||.NOT.mRegim=0} HIDE {||.NOT.mRegim=0} PARENT oGroup3;a=a+d
   @ a,2 DCRADIO mCognFun VALUE  3 PROMPT '3. И позитивные, и негативные когнитивные функции на одной экранной форме'                EDITPROTECT {||.NOT.mRegim=0} HIDE {||.NOT.mRegim=0} PARENT oGroup3;a=a+1.2*d

   *-------------------------------------------------------------------------------------------------------------------------------
   @s1    ,50 DCGROUP oGroup2 CAPTION 'Количество точек:'     SIZE 26, 2.5                   HIDE {||.NOT.mRegim=1}  PARENT oGroup1
   @ 1    , 1 DCSAY "" GET PointsCount PICTURE "##########"   EDITPROTECT {||.NOT.mRegim=1}  HIDE {||.NOT.mRegim=1}  PARENT oGroup2
   *-------------------------------------------------------------------------------------------------------------------------------
   t1 = "Точек:     "
   t2 = "Max радиус:"
   t3 = "Min радиус:"
   @s2    ,50 DCGROUP oGroup2 CAPTION 'Задайте параметры:'    SIZE 26, 4.5                   HIDE {||.NOT.mRegim=2}  PARENT oGroup1
   @ 1    , 1 DCSAY t1 GET PointsCount PICTURE "#########"    EDITPROTECT {||.NOT.mRegim=2}  HIDE {||.NOT.mRegim=2}  PARENT oGroup2
   @ 2    , 1 DCSAY t2 GET OutRadius   PICTURE "#########"    EDITPROTECT {||.NOT.mRegim=2}  HIDE {||.NOT.mRegim=2}  PARENT oGroup2
   @ 3    , 1 DCSAY t3 GET InnRadius   PICTURE "#########"    EDITPROTECT {||.NOT.mRegim=2}  HIDE {||.NOT.mRegim=2}  PARENT oGroup2
   *-------------------------------------------------------------------------------------------------------------------------------
   t1 = "Точек:     "
   t2 = "Витков:    "
   @s3    ,50 DCGROUP oGroup2 CAPTION 'Задайте параметры:'    SIZE 26, 5.5                   HIDE {||.NOT.mRegim=3}  PARENT oGroup1
   @ 1    , 1 DCSAY t1 GET PointsCount PICTURE "#########"    EDITPROTECT {||.NOT.mRegim=3}  HIDE {||.NOT.mRegim=3}  PARENT oGroup2
   @ 2    , 1 DCSAY t2 GET TurnovCount PICTURE "#########"    EDITPROTECT {||.NOT.mRegim=3}  HIDE {||.NOT.mRegim=3}  PARENT oGroup2
   @ 3    , 2 DCRADIO mTrend VALUE 1   PROMPT 'Возрастание'   EDITPROTECT {||.NOT.mRegim=3}  HIDE {||.NOT.mRegim=3}  PARENT oGroup2
   @ 4    , 2 DCRADIO mTrend VALUE 2   PROMPT 'Убывание'      EDITPROTECT {||.NOT.mRegim=3}  HIDE {||.NOT.mRegim=3}  PARENT oGroup2
   *-------------------------------------------------------------------------------------------------------------------------------
   t1 = "Точек:     "
   t2 = "Витков:    "
   @s4    ,50 DCGROUP oGroup2 CAPTION 'Задайте параметры:'    SIZE 26, 3.5                   HIDE {||.NOT.mRegim=4}  PARENT oGroup1
   @ 1    , 1 DCSAY t1 GET PointsCount PICTURE "#########"    EDITPROTECT {||.NOT.mRegim=4}  HIDE {||.NOT.mRegim=4}  PARENT oGroup2
   @ 2    , 1 DCSAY t2 GET TurnovCount PICTURE "#########"    EDITPROTECT {||.NOT.mRegim=4}  HIDE {||.NOT.mRegim=4}  PARENT oGroup2
   *-------------------------------------------------------------------------------------------------------------------------------
   @s5    ,50 DCGROUP oGroup2 CAPTION 'Отмечать точки?'       SIZE 26, 3.5                   HIDE {||.NOT.mRegim=5}  PARENT oGroup1
   @ 1    , 2 DCRADIO MarkPoints VALUE 1 PROMPT 'Нет'         EDITPROTECT {||.NOT.mRegim=5}  HIDE {||.NOT.mRegim=5}  PARENT oGroup2
   @ 2    , 2 DCRADIO MarkPoints VALUE 2 PROMPT 'Да'          EDITPROTECT {||.NOT.mRegim=5}  HIDE {||.NOT.mRegim=5}  PARENT oGroup2
   *-------------------------------------------------------------------------------------------------------------------------------
   @s6    ,50 DCGROUP oGroup2 CAPTION 'Задайте параметры:'    SIZE 26, 5.5                   HIDE {||.NOT.mRegim=6}  PARENT oGroup1
   @ 1    , 2 DCRADIO nModel VALUE 1 PROMPT 'Визуализация знач.шкалы' EDITPROTECT {||.NOT.mRegim=6}  HIDE {||.NOT.mRegim=6}  PARENT oGroup2
   @ 2    , 2 DCRADIO nModel VALUE 2 PROMPT 'Виз.шкалы+синтез модели' EDITPROTECT {||.NOT.mRegim=6}  HIDE {||.NOT.mRegim=6}  PARENT oGroup2
   @ 3.2 ,0.7 DCSAY "" GET mNumColumn PICTURE "#####"                 EDITPROTECT {||.NOT.mRegim=6}  HIDE {||.NOT.mRegim=6}  PARENT oGroup2
   @ 3.2 ,11  DCSAY "№ отобр. колонки"                                EDITPROTECT {||.NOT.mRegim=6}  HIDE {||.NOT.mRegim=6}  PARENT oGroup2
   @ 4.2 ,11  DCSAY 'в "Inp_map1.xls"'                                EDITPROTECT {||.NOT.mRegim=6}  HIDE {||.NOT.mRegim=6}  PARENT oGroup2
   *-------------------------------------------------------------------------------------------------------------------------------
   @s7    ,50 DCGROUP oGroup2 CAPTION 'Задайте параметры:'    SIZE 26, 5.5                   HIDE {||.NOT.mRegim=7}  PARENT oGroup1
   @ 1    , 2 DCRADIO nModel VALUE 1 PROMPT 'Визуализация знач.шкалы' EDITPROTECT {||.NOT.mRegim=7}  HIDE {||.NOT.mRegim=7}  PARENT oGroup2
   @ 2    , 2 DCRADIO nModel VALUE 2 PROMPT 'Виз.шкалы+распознавание' EDITPROTECT {||.NOT.mRegim=7}  HIDE {||.NOT.mRegim=7}  PARENT oGroup2
   @ 3.2 ,0.7 DCSAY "" GET mNumColumn PICTURE "#####"                 EDITPROTECT {||.NOT.mRegim=7}  HIDE {||.NOT.mRegim=7}  PARENT oGroup2
   @ 3.2 ,11  DCSAY "№ отобр. колонки"                                EDITPROTECT {||.NOT.mRegim=7}  HIDE {||.NOT.mRegim=7}  PARENT oGroup2
   @ 4.2 ,11  DCSAY 'в "Rsp_map1.xls"'                                EDITPROTECT {||.NOT.mRegim=7}  HIDE {||.NOT.mRegim=7}  PARENT oGroup2
   *-------------------------------------------------------------------------------------------------------------------------------
   @s8    ,50 DCGROUP oGroup2 CAPTION 'Формировать модель?'   SIZE 26, 3.5                   HIDE {||.NOT.mRegim=8}  PARENT oGroup1
   @ 1    , 2 DCRADIO nModel VALUE 1 PROMPT 'Нет'             EDITPROTECT {||.NOT.mRegim=8}  HIDE {||.NOT.mRegim=8}  PARENT oGroup2
   @ 2    , 2 DCRADIO nModel VALUE 2 PROMPT 'Да'              EDITPROTECT {||.NOT.mRegim=8}  HIDE {||.NOT.mRegim=8}  PARENT oGroup2
   *-------------------------------------------------------------------------------------------------------------------------------
   @s9    ,50 DCGROUP oGroup2 CAPTION 'Распознавать?'         SIZE 26, 3.5                   HIDE {||.NOT.mRegim=9}  PARENT oGroup1
   @ 1    , 2 DCRADIO nRasp  VALUE 1 PROMPT 'Нет'             EDITPROTECT {||.NOT.mRegim=9}  HIDE {||.NOT.mRegim=9}  PARENT oGroup2
   @ 2    , 2 DCRADIO nRasp  VALUE 2 PROMPT 'Да'              EDITPROTECT {||.NOT.mRegim=9}  HIDE {||.NOT.mRegim=9}  PARENT oGroup2
   *-------------------------------------------------------------------------------------------------------------------------------
   @s10   ,50 DCGROUP oGroup2 CAPTION 'Задать № отображаемой шкалы:' SIZE 26, 3.5            HIDE {||.NOT.mRegim=10} PARENT oGroup1
   @ 1    , 2 DCSAY 'в файле: "Inp_data.dbf"'                 EDITPROTECT {||.NOT.mRegim=10} HIDE {||.NOT.mRegim=10} PARENT oGroup2
   @ 2.2  , 1 DCSAY "" GET mNumColumn PICTURE "##########"    EDITPROTECT {||.NOT.mRegim=10} HIDE {||.NOT.mRegim=10} PARENT oGroup2
   *-------------------------------------------------------------------------------------------------------------------------------
   @s11   ,50 DCGROUP oGroup2 CAPTION 'Задать № отображаемой шкалы:' SIZE 26, 3.5            HIDE {||.NOT.mRegim=11} PARENT oGroup1
   @ 1    , 2 DCSAY 'в файле: "Inp_rasp.dbf"'                 EDITPROTECT {||.NOT.mRegim=11} HIDE {||.NOT.mRegim=11} PARENT oGroup2
   @ 2.2  , 1 DCSAY "" GET mNumColumn PICTURE "##########"    EDITPROTECT {||.NOT.mRegim=11} HIDE {||.NOT.mRegim=11} PARENT oGroup2
   *-------------------------------------------------------------------------------------------------------------------------------
   @s12   ,50 DCGROUP oGroup2 CAPTION 'Интегральный критерий:'SIZE 26, 3.5                   HIDE {||.NOT.mRegim=12} PARENT oGroup1
   @ 1    , 2 DCRADIO nKrit  VALUE 1 PROMPT 'Резонанс знаний' EDITPROTECT {||.NOT.mRegim=12} HIDE {||.NOT.mRegim=12} PARENT oGroup2
   @ 2    , 2 DCRADIO nKrit  VALUE 2 PROMPT 'Сумма знаний'    EDITPROTECT {||.NOT.mRegim=12} HIDE {||.NOT.mRegim=12} PARENT oGroup2
   ********************************************************************************************************************************
   
   DCGETOPTIONS TABSTOP
   DCREAD GUI ;
      TO lExit ;
      FIT ;
      OPTIONS GetOptions ;
      ADDBUTTONS;
      MODAL ;
      TITLE '4.8. Геокогнитивная подсистема "Эйдос"'

      ********************************************************************
      IF lExit
         ** Button Ok
      ELSE
         RETURN NIL
      ENDIF

      ********************************************************************
      ************ Проверки на корректность введенных параметров *********
      ********************************************************************

      IF PointsCount < 3                                                                                            
         LB_Warning('Число точек должно быть больше 2','4.8. Геокогнитивная подсистема "Эйдос"')                    
         RETURN NIL                                                                                                 
      ENDIF                                                                                                         
                                                                                                                    
      IF mNumColumn < 1                                                                                             
         LB_Warning( 'Номер отображаемой колонки должен быть не меньше 1','4.8. Геокогнитивная подсистема "Эйдос"' )
         RETURN NIL                                                                                                 
      ENDIF                                                                                                         

      ** Проверка числа колонок на превышение

*     IF mRegim = 6 .OR. mRegim = 7 .OR. mRegim = 10 .OR. mRegim = 1
**       F480('Inp_map1.', mNumColumn)    // Записать файлы: _ColumnNames.arx и _482.txt
**       F482('Inp_map1.', mNumColumn)    // Записать файлы: _ColumnNames.arx и _482.txt
*        aFile =''
*        IF mRegim = 6;aFile = 'Inp_map1.xls';ENDIF
*        IF mRegim = 7;aFile = 'Rsp_map1.xls';ENDIF
*        IF mRegim =10;aFile = 'Inp_data.dbf';ENDIF
*        IF mRegim =11;aFile = 'Inp_rasp.dbf';ENDIF
*        DIRCHANGE(Disk_dir+"\AID_DATA\Inp_data\")                                                                                                
*        IF .NOT. FILE(aFile)                                                                                                                  
*           LB_Warning( 'В папке: '+Disk_dir+'\AID_DATA\Inp_data\ должен быть файл: "'+aFile+'"','4.8. Геокогнитивная подсистема "Эйдос"' )                                                              
*           RETURN NIL                                                                                                                            
*        ENDIF                                                                                                                                    
*        M_NewAppl  = M_ApplsPath+"\Inp_data\"                                                                                                                                                                                                                                           
*        DIRCHANGE(M_NewAppl)
**       MsgBox(M_NewAppl)
*        IF AT('xls', aFile) > 0       // ПРЕОБРАЗОВАНИЕ: XLS => DBF  
*        ENDIF                                                                                                                                    
*        bFile = SUBSTR(aFile,1,AT('.', aFile)-1)                                                                                            
*        CLOSE ALL                                                                                                                                
*        USE (bFile) EXCLUSIVE NEW                                                                                                                
*        SELECT(bFile)                                                                                                                            
*        IF mNumColumn > FCOUNT()                                                                                                                 
*           aMess := {}                                                                                                                           
*           AADD(aMess, 'Номер отображаемой колонки: '+ALLTRIM(STR(mNumColumn)))                                                                  
*           AADD(aMess, 'не должен быть больше: '+ALLTRIM(STR(FCOUNT())))                                                                         
*           AADD(aMess, 'числа колонок в файле: '+aFile)                                                                                       
*           LB_Warning( aMess, '4.8. Геокогнитивная подсистема "Эйдос"' )                                                                         
*           RETURN NIL                                                                                                                            
*        ENDIF                                                                                                                                    
*     ENDIF

******* Вызов функций ************************************************************************

DIRCHANGE(Disk_dir)                                                                                                                      

IF mFlagsQuare
   PUBLIC X_MaxW :=  910, Y_MaxW := 910                                             // Размер графического окна для самого графика в пикселях
ELSE
   PUBLIC X_MaxW := 1800, Y_MaxW := 850                                             // Размер графического окна для самого графика в пикселях
ENDIF
PUBLIC nXSize := X_MaxW-50                                                          // Размер изображения в пикселях
PUBLIC nYSize := Y_MaxW-50

DO CASE
   CASE mRegim = 0                           // Визуализация когнитивных функций

*       MsgBox(STR(M_CurrInf)+STR(mKodClSc1)+STR(mKodClSc2)+STR(mKodOpSc1)+STR(mKodOpSc2))

        *** Загрузить базы моделей *******************************************************

        IF ApplChange("")  // Перейти в папку выбранного приложения или выйти из системы
           LB_Warning("Необходимо задать (выбрать) хотя бы одно текущее приложение !!!")
           RETURN NIL
        ENDIF

        ConvTXTtoDBF()                       // Преобразование Abs, Prc#, Inf# из TXT в DBF    

        ClearImageTr()               // Очистка изображения                                                                       
        
        ********************************************
        *** Отображение заданных когнитивных функций
        ********************************************

        IF FILEDATE("Cogn_fun",16) = CTOD("//")
           DIRMAKE("Cogn_fun")
           Mess = 'В папке текущего приложения: "#" не было директории "Cogn_fun" для когнитивных функций и она была создана!'
           Mess = STRTRAN(Mess, "#", UPPER(ALLTRIM(M_PathAppl)))
           LB_Warning(Mess, '4.5. Визуализация когнитивных функций системы "Эйдос-Х++"' )
        ENDIF

        nRun = 0
        FOR mOpSc = mKodOpSc1 TO mKodOpSc2
            FOR mClSc = mKodClSc1 TO mKodClSc2
                nRun++
                LC_CognFun(mCurrInf, mOpSc, mClSc, mCognFun, nRun)   // Отображение заданной когнитивной функции
            NEXT
        NEXT

        *****************************************************************************************
        *****************************************************************************************
        *****************************************************************************************

   CASE mRegim = 1                           // Генерация случайным образом                                 
        RndGenPoints()                       // Стереть файлы: _ColumnNames.arx и _482.txt                               
   CASE mRegim = 2                           // Цветовой круг                                               
        CircleColor()                        // Стереть файлы: _ColumnNames.arx и _482.txt                  
   CASE mRegim = 3                           // Цветовая спираль Архимеда                                   
        ArchimSpiral()                       // Стереть файлы: _ColumnNames.arx и _482.txt                  
   CASE mRegim = 4                           // Цветовая логарифмическая спираль                            
        LogarSpiral()                        // Стереть файлы: _ColumnNames.arx и _482.txt                  
                                                                                                            
   CASE mRegim = 5                           // Координаты и цвета точек из графического файла              
        CoordPointsFile()                    // Стереть файлы: _ColumnNames.arx и _482.txt                  
                                                                                                            
   CASE mRegim = 6                           // Из исходной 1d Excel-таблицы исходных данных: "Inp_map1.dbf"
        F480('Inp_map1.', mNumColumn, 6)     // Записать файлы: _ColumnNames.arx и _482.txt                 
   CASE mRegim = 7                           // Из распознаваемой  1d Excel-таблицы: "Rsp_map1.dbf"         
        F480('Rsp_map1.', mNumColumn, 7)     // Записать файлы: _ColumnNames.arx и _482.txt                 
                                                                                                            
   CASE mRegim = 8                           // Из 2d Excel-таблицы исходных данных: "Inp_map2.dbf"  <################################       
        F481('Inp_map2.')                    // Стереть файлы: _ColumnNames.arx и _482.txt                  
   CASE mRegim = 9                           // Из распознаваемой  2d Excel-таблицы: "Rsp_map2.dbf"  <################################       
        F481('Rsp_map2.')                    // Стереть файлы: _ColumnNames.arx и _482.txt                  
                                                                                                            
   CASE mRegim = 10                          // Из базы исходных данных:   "Inp_data.dbf"                   
        F482('Inp_map1.', mNumColumn, 10)    // Записать файлы: _ColumnNames.arx и _482.txt
   CASE mRegim = 11                          // Из распознаваемой выборки: "Inp_rasp.dbf"
        F482('Rsp_map1.', mNumColumn, 10)    // Записать файлы: _ColumnNames.arx и _482.txt

   CASE mRegim = 12                          // Из итоговых результатов распознавания: "Rsp_IT.dbf"
        F483(nKrit)                          // Записать файлы: _ColumnNames.arx и _483.txt          <################################
ENDCASE

RETURN NIL
[/size]

User avatar
Auge_Ohr
Posts: 1407
Joined: Wed Feb 24, 2010 3:44 pm

Re: Screen grabber in Alaska

#22 Post by Auge_Ohr »

Eugene Lutsenko wrote:PUBLIC oFont, oPS := oStatic:lockPs()
you have to "unlock" before GraSaveScreen() and "lock" later again.

Code: Select all

// will not work when oSourcePS is "lock"
GraBitBlt( oTargetPS, oSourcePS, ...
if you want to "build" a Bitmap i recommend to start with a empty Bitmap and later assign it to a Xbpstatic to show it
greetings by OHR
Jimmy

User avatar
Auge_Ohr
Posts: 1407
Joined: Wed Feb 24, 2010 3:44 pm

Re: Screen grabber in Alaska

#23 Post by Auge_Ohr »

here Demo using empty Bitmap at start.
MAKEPIC.ZIP
Source pure Xbase++
(1.48 KiB) Downloaded 738 times
p.s. set Background Color first before GRA*
greetings by OHR
Jimmy

User avatar
Eugene Lutsenko
Posts: 1649
Joined: Sat Feb 04, 2012 2:23 am
Location: Russia, Southern federal district, city of Krasnodar
Contact:

Re: Screen grabber in Alaska

#24 Post by Eugene Lutsenko »

Auge_Ohr wrote:here Demo using empty Bitmap at start.
MAKEPIC.ZIP
p.s. set Background Color first before GRA*
I think You did it! Will study and use.

I also use the empty graphic. But I recorded them in a file.

User avatar
Eugene Lutsenko
Posts: 1649
Joined: Sat Feb 04, 2012 2:23 am
Location: Russia, Southern federal district, city of Krasnodar
Contact:

Re: Screen grabber in Alaska

#25 Post by Eugene Lutsenko »

Jimmy!

And could you paste in the program button. By clicking on one button is drawn and saved with a specific name of a single image. By clicking on another button is drawn and saved with a specific name different image. In this case the graphics object is the same, i.e. not be re-created again, and simply erased by clicking on the button. This would allow you to manage images on a graphics object without creating it each time anew in new Windows for each image. It would be very valuable.

In principle, I have in the system and it is made. But during the implementation (objects) I got confused and made mistakes that came out when using the rotation in the images.

Somehow, I got confused with the objects appears only when saving images in the formation of which were used for rotation

Code: Select all

//////////////////////////////////////////////////////////////////////
// 
//  FANCYFNT.PRG
//
//  Copyright:
//      Alaska Software, (c) 1997-2009. All rights reserved.
//
//  Contents:
//      This sample program renders some text strings demonstrating the GRA
//      engine's GraStringAt() primitive.
//
//////////////////////////////////////////////////////////////////////
#include "appevent.ch"
#include "xbp.ch"
#include "gra.ch"
#include "common.ch"


******************************************************************************
* Main() procedure and event loop
******************************************************************************
PROCEDURE appsys
return

PROCEDURE Main

LOCAL nEvent, mp1, mp2, oXbp
LOCAL oPS
LOCAL oFont
LOCAL aMatrix
LOCAL i
LOCAL aAttrF
LOCAL nAngle

LOCAL oDlg
LOCAL oStatic
LOCAL oBitmap
LOCAL aPos     := {0,0}
LOCAL aSize    := {640,480}
LOCAL nColor   := GRA_CLR_WHITE

   oDlg        := XbpDialog():new(AppDesktop(),, {0,0} )
   oDlg:title  := "Parent Window"
   oDlg:titlebar := .T.
   oDlg:clientSize := aSize
   oDlg:create()
   CenterControl(oDlg)

   oStatic:= XbpStatic():new(oDlg:drawingArea,, {0,0},aSize  )
   oStatic:type := XBPSTATIC_TYPE_BITMAP
   oStatic:create()

* ------------------------------------------------------------- *

   oBitmap := XbpBitmap() :new() :create()       // create Bitmap
   oPS := XbpPresSpace():new()                   // NO :Create() here
   oPS:create( oBitmap, { aSize[1],aSize[2] } )  // here :Create()
   oBitmap:presSpace( oPS )                      // assing to Bitmap:presSpace
   oBitmap:make( aSize[1],aSize[2] )             // make empty Bitmap

   GraSetColor( oPS, nColor, nColor )            // Background Color
   GraBox( oPS, {0,0}, {aSize[1],aSize[2]}, 1 )  // fill Background

* ------------------------------------------------------------- *
* Button horizontal menu
* ------------------------------------------------------------- *

*  treatment 1st button *****************************************

   oFont := XbpFont():new():create("20.Arial Bold")
   GraSetFont(oPS , oFont)
   aAttrF := ARRAY( GRA_AS_COUNT )
   aAttrF [ GRA_AS_COLOR      ] := GRA_CLR_BLACK
   aAttrF [ GRA_AS_HORIZALIGN ] := GRA_HALIGN_LEFT
   aAttrF [ GRA_AS_VERTALIGN  ] := GRA_VALIGN_HALF
   GraSetAttrString( oPS, aAttrF )
   GraStringAt( oPS, { 20,350 }, 'The text before the rotation' )

   *********************************************
   ******** Save before rotating the image *****
   *********************************************

   FERASE( "Picture1.JPG" )
   oBitmap:saveFile("Picture1.JPG",XBPBMP_FORMAT_JPG)
   oStatic:Setcaption(oBitmap)

* ------------------------------------------------------------- *

*  treatment 2st button *****************************************

   /*
    * Rotate text strings to show transforms via
    * SetGraTransform()
    */

   oFont := XbpFont():new():create("10.Arial Bold")
   GraSetFont(oPS , oFont)
   aAttrF := ARRAY( GRA_AS_COUNT )
   aAttrF [ GRA_AS_COLOR      ] := GRA_CLR_BLACK
   aAttrF [ GRA_AS_HORIZALIGN ] := GRA_HALIGN_CENTER
   aAttrF [ GRA_AS_VERTALIGN  ] := GRA_VALIGN_HALF
   GraSetAttrString( oPS, aAttrF )

   nAngle := 10

   aMatrix := GraInitMatrix()
   FOR i:=1 TO nAngle
      GraRotate( oPS, aMatrix, 360/nAngle, {200, 200}, GRA_TRANSFORM_ADD )
      oPS:setGraTransform( aMatrix, GRA_TRANSFORM_REPLACE )
      GraStringAt( oPS, {100,100}, ALLTRIM(STR(i))+"-Rotated text..." )
   NEXT

   FERASE( "Picture2.JPG" )
   oBitmap:saveFile("Picture2.JPG",XBPBMP_FORMAT_JPG)
   oStatic:Setcaption(oBitmap)

* ------------------------------------------------------------- *

*  treatment 3st button *****************************************

   aMatrix := GraInitMatrix()                    // NEED new GraInitMatrix()

   ***** Rotate the image (360) for proper rendering

   GraRotate( oPS, aMatrix, 360, {200, 200}, GRA_TRANSFORM_ADD )
   oPS:setGraTransform( aMatrix, GRA_TRANSFORM_REPLACE )

   oFont := XbpFont():new():create("20.Arial Bold")
   GraSetFont(oPS , oFont)
   aAttrF := ARRAY( GRA_AS_COUNT )
   aAttrF [ GRA_AS_COLOR      ] := GRA_CLR_BLACK
   aAttrF [ GRA_AS_HORIZALIGN ] := GRA_HALIGN_LEFT
   aAttrF [ GRA_AS_VERTALIGN  ] := GRA_VALIGN_HALF
   GraSetAttrString( oPS, aAttrF )
   GraStringAt( oPS, { 20,50 }, 'The text after the label at an angle' )

   *********************************************
   **** Save after image rotation **************
   *********************************************

   FERASE( "Picture3.JPG" )
   oBitmap:saveFile("Picture3.JPG",XBPBMP_FORMAT_JPG)
   oStatic:Setcaption(oBitmap)

* ------------------------------------------------------------- *

*  Quit *********************************************************

   SetAppFocus(oStatic)

   nEvent := 0
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp)
      DO CASE
         CASE nEvent == xbeP_Keyboard .AND. mp1 == xbeK_ESC
            EXIT
      OTHERWISE
         oXbp:HandleEvent( nEvent, mp1, mp2 )
      ENDCASE
   ENDDO

RETURN
// EOF
[/size]

User avatar
Eugene Lutsenko
Posts: 1649
Joined: Sat Feb 04, 2012 2:23 am
Location: Russia, Southern federal district, city of Krasnodar
Contact:

Re: Screen grabber in Alaska

#26 Post by Eugene Lutsenko »

I isolated the problem. Even earlier in the course of the experiment, I found that the problem is associated with the use of rotation in the image . Images created without a pivot is saved fine, the problem is not manifested. Now I've removed all the lines associated with a turn and some turns. And found only three lines: (below), which are the cause of the problem. If these lines commented out, the image is saved normally. The image itself is of course not what was intended.

The first rendered image is formed, and remains absolutely correct. Problems affecting subsequent images. so if I could DISABLE the rotation as if it did not use (to reset the parameters of the formation graphics), then everything would be fine and for subsequent images

Code: Select all

*  aMatrix := GraInitMatrix()                                                                               // <<<##########
*  GraRotate( oPS, aMatrix, 360, {900, 425}, GRA_TRANSFORM_REPLACE )                                        // <<<##########
*  oPS:setGraTransform( aMatrix, GRA_TRANSFORM_REPLACE )                                                    // <<<##########

User avatar
Eugene Lutsenko
Posts: 1649
Joined: Sat Feb 04, 2012 2:23 am
Location: Russia, Southern federal district, city of Krasnodar
Contact:

Re: Screen grabber in Alaska

#27 Post by Eugene Lutsenko »

It's all good!!!

These lines (before the actual saving of the image) are:

Code: Select all

   aMatrix := GraInitMatrix()                                                                               // <<<##########
   GraRotate( oPS, aMatrix,   0, {900, 425}, GRA_TRANSFORM_REPLACE )                                        // <<<##########
   oPS:setGraTransform( aMatrix, GRA_TRANSFORM_REPLACE )                                                    // <<<##########

User avatar
rdonnay
Site Admin
Posts: 4733
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: Screen grabber in Alaska

#28 Post by rdonnay »

Does this mean your problem is solved?

I noticed that you made a change to your code:

Was: GraRotate( oPS, aMatrix, 360, {900, 425}, GRA_TRANSFORM_REPLACE )

Is: GraRotate( oPS, aMatrix, 0, {900, 425}, GRA_TRANSFORM_REPLACE )
The eXpress train is coming - and it has more cars.

User avatar
Eugene Lutsenko
Posts: 1649
Joined: Sat Feb 04, 2012 2:23 am
Location: Russia, Southern federal district, city of Krasnodar
Contact:

Re: Screen grabber in Alaska

#29 Post by Eugene Lutsenko »

rdonnay wrote:Does this mean your problem is solved?

I noticed that you made a change to your code:

Was: GraRotate( oPS, aMatrix, 360, {900, 425}, GRA_TRANSFORM_REPLACE )

Is: GraRotate( oPS, aMatrix, 0, {900, 425}, GRA_TRANSFORM_REPLACE )

Yes, Roger!

It turned out that this was the cause of the problem and this change 360 to 0 was enough. Now everything is saved correctly. After examining the program Jimmy (which is very good and valuable), and given Your recommendations, I was sure that something is messed up with objects. But it turned out it was not this (although, of course, in objects I do not understand). Just when the rotation will set to 0, then everything works as without rotation, i.e. including all images normally saved. That's all. I didn't know that and thought that you can just somehow disable the rotation. Probably rotation 0 degrees - this is an alternative to just disabling it. Interestingly, at 360, the image on the screen was correct, but he still had a black square. And when 0, and on the screen everything is fine, and in the file.

Post Reply