Subversion Repositories Kolibri OS

Rev

Rev 2188 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;---------------------------------------------------------------------
  2. ; ÓÑÒÀÍÎÂÈÒÜ ÔÎÍ
  3. background:
  4.         cmp     [soi],0
  5.         je      .end
  6.  
  7.         cmp     [bgrmode],dword 2
  8.         ja      .stretch_crop
  9.  
  10.         mov     ecx,[img_width] ;       øèðèíà
  11.         test    ecx,ecx
  12.         jz      .end
  13.         mov     edx,[img_high]  ; âûñîòà 
  14.         test    edx,edx
  15.         jz      .end
  16.         mcall   15,1    ; set size
  17.  
  18.         mov     esi,ecx
  19.         imul    esi,edx
  20.         lea     esi,[esi*3]
  21.         mov     ecx,[soi]
  22.  
  23.         xor     edx,edx
  24.  
  25.         cmp     [img_resolution],24
  26.         je      @f
  27.        
  28.         push    dword image_file
  29.         call    [convert_Conv_24b]
  30.        
  31.         mov     ecx,[raw_pointer_2]
  32.         add     ecx,44
  33.         mcall   15,5            ;15,5 set data
  34.         mcall   68,13,[raw_pointer_2]
  35.         jmp     .set_mode
  36. @@:
  37.         mcall   15,5            ; 15,5 set data
  38. .set_mode:
  39.         mcall   15,4,[bgrmode]  ; 15,4 set mode
  40.         dec     ebx             ; 15,3 redraw background
  41.         mcall
  42. .end:
  43.         ret
  44. ;---------------------------------------------------------------------
  45. .stretch_crop:
  46.         cmp     [bgrmode],dword 3
  47.         jne     .stretch_inscribe
  48.         xor     eax,eax
  49.         mov     [stretch_start_coordinates],eax
  50.    
  51.         mcall   14
  52.  
  53.         mov     ebx,eax
  54.         and     eax,0xffff
  55.         inc     eax
  56.         mov     [screen_high],eax
  57.         shr     ebx,16
  58.         inc     ebx
  59.         mov     [screen_width],ebx
  60.        
  61.         xchg    eax,ebx
  62.         call    calculate_relation
  63.         mov     [screen_relation],eax
  64.        
  65.         mov     eax,[img_width]
  66.         mov     ebx,[img_high]
  67.         call    calculate_relation
  68.         mov     [picture_relation],eax
  69.        
  70.         cmp     eax,[screen_relation]
  71.         jb      @f
  72. ; Y = Yimg
  73. ; X = Yimg*Xscreen/Yscreen
  74.         mov     eax,[img_high]
  75.         mov     [stretch_img_high],eax
  76.         mov     eax,[img_high]
  77.         imul    eax,dword [screen_width]
  78.         mov     ebx,[screen_high]
  79.         call    integer_division       
  80.         mov     [stretch_img_width],eax
  81.         jmp     .continue
  82. @@:
  83. ; X = Ximg
  84. ; Y = Ximg*Yscreen/Xscreen
  85.         mov     eax,[img_width]
  86.         mov     [stretch_img_width],eax
  87.         mov     eax,[img_width]
  88.         imul    eax,dword [screen_high]
  89.         mov     ebx,[screen_width]
  90.         call    integer_division
  91.         mov     [stretch_img_high],eax
  92. .continue:
  93.         mov     eax,[Stretch_Crop_Corner]
  94.         mov     ebx,eax
  95.         shr     eax,16
  96.         shl     eax,2
  97.         mov     eax,[eax+call_to_calculate_stretch_start_coordinates_Y]
  98.         call    eax
  99.         and     ebx,0xffff
  100.         shl     ebx,2
  101.         mov     ebx,[ebx+call_to_calculate_stretch_start_coordinates_X]
  102.         call    ebx
  103.        
  104.         mov     ebx,[screen_width]
  105.         shl     ebx,16
  106.         add     ebx,[screen_high]
  107.        
  108.         mov     eax,[stretch_img_width]
  109.         shl     eax,16
  110.         add     eax,[stretch_img_high] 
  111.        
  112.         push    dword eax                       ; eax - crop size
  113.         push    dword 0                         ; edi - background color
  114.         push    dword 1                         ; esi - filtering
  115.         push    dword 0                         ; edx - scaling mode
  116.         push    dword [stretch_start_coordinates]       ; ecx - start_coordinates
  117.         push    ebx                             ; ebx - new_size
  118.         push    dword image_file                ; eax -  convert data table
  119.  
  120.         call    [Scaling_Start]
  121.         call    background_1
  122.         ret
  123. ;---------------------------------------------------------------------
  124. .stretch_inscribe:
  125.         xor     eax,eax
  126.         mov     [stretch_start_coordinates],eax
  127.    
  128.         mcall   14
  129.  
  130.         mov     ebx,eax
  131.         and     eax,0xffff
  132.         inc     eax
  133.         mov     [screen_high],eax
  134.         shr     ebx,16
  135.         inc     ebx
  136.         mov     [screen_width],ebx
  137.        
  138.         xchg    eax,ebx
  139.         call    calculate_relation
  140.         mov     [screen_relation],eax
  141.        
  142.         mov     eax,[img_width]
  143.         mov     ebx,[img_high]
  144.         call    calculate_relation
  145.         mov     [picture_relation],eax
  146.        
  147.         cmp     eax,[screen_relation]
  148.         ja      @f
  149. ; Y = Yimg
  150. ; X = Yimg*Xscreen/Yscreen
  151.         mov     eax,[screen_high]       ;[img_high]
  152.         mov     [stretch_img_high],eax
  153.         mov     eax,[screen_high]       ;[img_high]
  154.         imul    eax,dword [img_width]   ;[screen_width]
  155.         mov     ebx,[img_high]          ;[screen_high]
  156.         call    integer_division       
  157.         mov     [stretch_img_width],eax
  158.         jmp     .continue_1
  159. @@:
  160. ; X = Ximg
  161. ; Y = Ximg*Yscreen/Xscreen
  162.         mov     eax,[screen_width]      ;[img_width]
  163.         mov     [stretch_img_width],eax
  164.         mov     eax,[screen_width]      ;[img_width]
  165.         imul    eax,dword [img_high]    ;[screen_high]
  166.         mov     ebx,[img_width]         ;[screen_width]
  167.         call    integer_division
  168.         mov     [stretch_img_high],eax
  169. .continue_1:
  170. ;       mov     ebx,[screen_width]
  171. ;       shl     ebx,16
  172. ;       add     ebx,[screen_high]
  173.        
  174.         mov     ebx,[stretch_img_width]
  175.         shl     ebx,16
  176.         add     ebx,[stretch_img_high] 
  177.  
  178.        
  179.         push    dword 0                         ; eax - crop size
  180.         push    dword 0                         ; edi - background color
  181.         push    dword 1                         ; esi - filtering
  182.         push    dword 0                         ; edx - scaling mode
  183.         push    dword [stretch_start_coordinates]       ; ecx - start_coordinates
  184.         push    ebx                             ; ebx - new_size
  185.         push    dword image_file                ; eax -  convert data table
  186.  
  187.         call    [Scaling_Start]
  188.        
  189.         mov     eax,[raw_pointer_2]
  190.         mov     [crop_raw_pointer],eax
  191.         mov     [crop_raw_pointer_2],eax
  192.  
  193.         mov     eax,[raw_pointer_2]
  194.         mov     eax,[eax+12]            ;overall depth of the pixel
  195.         cmp     al,24
  196.         je      @f
  197.        
  198.         push    dword crop_image_file
  199.         call    [convert_Conv_24b]
  200.        
  201.         mov     ecx,[raw_pointer_2]
  202.         mcall   68,13
  203. @@:
  204.         mov     ecx,[screen_width]
  205.         imul    ecx,[screen_high]
  206.         lea     ecx,[ecx*3]
  207.         add     ecx,44
  208.        
  209. ;       mcall   68,20,,[crop_raw_pointer_2]
  210. ;       mov     [crop_raw_pointer_2],eax
  211.         mov     eax,[crop_raw_pointer_2]
  212.         mov     [crop_raw_pointer],eax
  213.  
  214.         mcall   68,12
  215.         mov     [crop_raw_pointer_2],eax
  216.  
  217. ; fill of color
  218.         sub     ecx,44
  219.         mov     edi,eax
  220.         add     edi,44
  221.         mov     eax,0xaaaaaa
  222.         cld
  223. @@:
  224.         stosb
  225.         ror     eax,8
  226.         stosb
  227.         ror     eax,8
  228.         stosb
  229.         rol     eax,16
  230.         sub     ecx,2
  231.         loop    @b
  232.  
  233. ; copy of data
  234.         mov     eax,[screen_width]
  235.         sub     eax,[stretch_img_width]
  236.         mov     ebx,eax
  237.         lea     eax,[eax*3]
  238.         shr     ebx,1
  239.         lea     ebx,[ebx*3]
  240.        
  241.         mov     edi,[screen_high]
  242.         sub     edi,[stretch_img_high]
  243.         shr     edi,1
  244.         imul    edi,[screen_width]
  245.         lea     edi,[edi*3]
  246.         add     edi,[crop_raw_pointer_2]
  247.         add     edi,44
  248.         add     edi,ebx
  249.        
  250.         mov     esi,[crop_raw_pointer]
  251.         add     esi,44
  252.  
  253.         mov     ebx,[stretch_img_width]
  254.         lea     ebx,[ebx*3]
  255.        
  256.         mov     ecx,[stretch_img_high]
  257. @@:
  258.         push    ecx
  259.         mov     ecx,ebx
  260.         rep     movsb
  261.         pop     ecx
  262.         add     edi,eax
  263.         loop    @b
  264.        
  265. ; header
  266.         mov     esi,[crop_raw_pointer] 
  267.         mov     edi,[crop_raw_pointer_2]
  268.         mov     ecx,44/4
  269.         rep     stosd
  270.  
  271.         mcall   68,13,[crop_raw_pointer]
  272. ;set the background    
  273.         mov     eax,[crop_raw_pointer_2]
  274.         mov     ebx,[screen_width]     
  275.         mov     [eax+4],ebx
  276.         mov     ebx,[screen_high]
  277.         mov     [eax+8],ebx
  278.        
  279.         mov     ecx,[screen_width]      ; øèðèíà
  280.         test    ecx,ecx
  281.         jz      @f
  282.         mov     edx,[screen_high]       ; âûñîòà 
  283.         test    edx,edx
  284.         jz      @f
  285.         mcall   15,1    ; set size
  286.        
  287.         mov     esi,ecx
  288.         imul    esi,edx
  289.         lea     esi,[esi*3]
  290.        
  291.         xor     edx,edx
  292.         mov     ecx,[crop_raw_pointer_2]
  293.         add     ecx,44
  294.         mcall   15,5            ;15,5 set data
  295.         xor     ecx,ecx
  296.         inc     ecx
  297.         mcall   15,4            ; 15,4 set mode
  298.         dec     ebx             ; 15,3 redraw background
  299.         mcall
  300. @@:
  301.         mcall   68,13,[crop_raw_pointer_2]
  302.         ret    
  303. ;---------------------------------------------------------------------
  304. call_to_calculate_stretch_start_coordinates_X:
  305.         dd      calculate_stretch_start_coordinates_XL
  306.         dd      calculate_stretch_start_coordinates_XC
  307.         dd      calculate_stretch_start_coordinates_XR
  308. ;---------------------------------------------------------------------
  309. call_to_calculate_stretch_start_coordinates_Y:
  310.         dd      calculate_stretch_start_coordinates_YU
  311.         dd      calculate_stretch_start_coordinates_YC
  312.         dd      calculate_stretch_start_coordinates_YD
  313. ;---------------------------------------------------------------------
  314. calculate_stretch_start_coordinates_XC:
  315.         xor     ecx,ecx
  316. .1:
  317.         mov     eax,[img_width]
  318.         sub     eax,[stretch_img_width]
  319.         test    ecx,ecx
  320.         jnz     @f
  321.         shr     eax,1
  322. @@:
  323.         mov     [stretch_start_coordinates.x],ax
  324. calculate_stretch_start_coordinates_XL:
  325.         ret
  326. ;---------------------------------------------------------------------
  327. calculate_stretch_start_coordinates_XR:
  328.         xor     ecx,ecx
  329.         inc     ecx
  330.         jmp     calculate_stretch_start_coordinates_XC.1
  331. ;---------------------------------------------------------------------
  332. calculate_stretch_start_coordinates_YC:
  333.         xor     ecx,ecx
  334. .1:
  335.         mov     eax,[img_high]
  336.         sub     eax,[stretch_img_high]
  337.         test    ecx,ecx
  338.         jnz     @f
  339.         shr     eax,1
  340. @@:
  341.         mov     [stretch_start_coordinates.y],ax
  342. calculate_stretch_start_coordinates_YU:
  343.         ret
  344. ;---------------------------------------------------------------------
  345. calculate_stretch_start_coordinates_YD:
  346.         xor     ecx,ecx
  347.         inc     ecx
  348.         jmp     calculate_stretch_start_coordinates_YC.1
  349. ;---------------------------------------------------------------------
  350. background_1:
  351.         mov     ecx,[screen_width]      ;[crop_img_width]       ; øèðèíà
  352.         test    ecx,ecx
  353.         jz      .end
  354.         mov     edx,[screen_high]       ;[crop_img_high]        ; âûñîòà 
  355.         test    edx,edx
  356.         jz      .end
  357.         mcall   15,1    ; set size
  358. .1:
  359.         mov     esi,ecx
  360.         imul    esi,edx
  361.         lea     esi,[esi*3]
  362.         mov     ecx,[raw_pointer_2]     ;[soi]
  363.         mov     eax,[ecx+28]
  364.         add     ecx,eax
  365.  
  366.         xor     edx,edx
  367.  
  368.         mov     eax,[raw_pointer_2]
  369.         mov     eax,[eax+12]            ;overall depth of the pixel
  370.         cmp     al,24
  371.         je      @f
  372.  
  373.         mov     eax,[raw_pointer_2]
  374.         mov     [crop_raw_pointer],eax
  375.        
  376.         push    dword crop_image_file
  377.         call    [convert_Conv_24b]
  378.        
  379.         mov     ecx,[crop_raw_pointer_2]
  380.         add     ecx,44
  381.         mcall   15,5            ;15,5 set data
  382.         mcall   68,13,[crop_raw_pointer_2]
  383.         jmp     .set_mode
  384. @@:
  385.         mcall   15,5            ; 15,5 set data
  386. .set_mode:
  387.         xor     ecx,ecx
  388.         inc     ecx
  389. ;       mov     ecx,[bgrmode]
  390.         mcall   15,4            ; 15,4 set mode
  391.         dec     ebx             ; 15,3 redraw background
  392.         mcall
  393. .end:
  394.         mov     ecx,[raw_pointer_2]
  395.         mcall   68,13
  396.         ret
  397. ;---------------------------------------------------------------------