Subversion Repositories Kolibri OS

Rev

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

  1. ;
  2. ; Œ ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥­¨© ç१ ä㭪樨 ¡¨¡«¨®â¥ª¨ libimg.
  3. ; „¥©áâ¢¨ï ª®â®àë¥ ¤¥« ¥â ¬ ªà®á load_image_file:
  4. ;
  5. ; à®¢¥àï¥â à §¬¥à ¯®«ã祭­®£® ä ©«  á ¨§®¡à ¦¥­¨¥¬.
  6. ; ‚뤥«ï¥â ¯®¤ ­¥£® ¯ ¬ïâì ¨ § £à㦠¥â â㤠 ä ©«.
  7. ; Ž¯à¥¤¥«ï¥â à §¬¥à ¯ ¬ï⨠­¥®¡å®¤¨¬®© ¤«ï à á¯ ª®¢ª¨ ¨§®¡à ¦¥­¨ï.
  8. ; ¥à¥¢ë¤¥«ï¥â ¯ ¬ïâì, ¨ à á¯ ª®¢ë¢ ¥â ¨§®¡à ¦¥­¨¥ ¨§ ä®à¬ â®¢ jpg, png, ...
  9. ;    ¢ ä®à¬ â rgb ª®â®àë© ¬®¦­® ¢ë¢®¤¨âì ­  íªà ­ ç¥à¥§ á¨áâ. äã­ªæ¨î.
  10. ; à¨ ­¥®¡å®¤¨¬®á⨠¬®¦­® â ª¦¥ ¯®«ãç¨âì à §¬¥àë ®âªà뢠¥¬®£® ¨§®¡à ¦¥­¨ï ¤«ï
  11. ;    ¨å ¤ «ì­¥©è¥£® ¨á¯®«ì§®¢ ­¨ï ¢ ¯à®£à ¬¬¥.
  12. ;
  13. ; ‚ ¨á¯®«ì§ãî饩 ¯à®£à ¬¬¥ ¤®«¦­  ¡ëâì ¯®¤ª«î祭  ¡¨¡«¨®â¥ª  libimg,
  14. ;    ®¡ê¥­  ¯¥à¥¬¥­­ ï file_name à §¬¥à®¬ ®ª®«® 4096 ¡ ©â,
  15. ;      â ª¦¥ áâàãªâãà  run_file_70 ⨯  FileInfoBlock.
  16.  
  17. ; ¯®¤ª«î祭¨¥ ­¥ª®â®àëå ­¥®¡å®¤¨¬ëå ä ©«®¢:
  18. include 'dll.inc'
  19. include 'develop/libraries/box_lib/load_lib.mac'
  20. include 'develop/libraries/libs-dev/libio/libio.inc'
  21.  
  22. align 4
  23. open_b rb 560
  24.  
  25. txt_err_img_file:
  26. if lang eq ru
  27.         db 'Žè¨¡ª  N'
  28. .n: db '* ¯à¨ ®âªàë⨨ ä ©«  '
  29. else
  30.         db 'Error N'
  31. .n: db '*. Can',39,'t open file '
  32. end if
  33. .f: dd 0,0
  34.  
  35. ; path - ¬®¦¥â ¡ëâì ¯¥à¥¬¥­­®© ¨«¨ áâப®¢ë¬ ¯ à ¬¥â஬
  36. ; buf - ¯¥à¥¬¥­­ ï ªã¤  ¡ã¤¥â § ¯¨á ­ 㪠§ â¥«ì ­  ¨§®¡à ¦¥­¨¥ ¢ ä®à¬ â¥ rgb,
  37. ;    ¢ á«ãç ¥ ¥á«¨ ä ©« ­¥ ®âªà®¥âáï â® ¡ã¤¥â § ¯¨á ­ 0
  38. ; img_w, img_h - ¯¥à¥¬¥­­ë¥ ªã¤  ¡ã¤ãâ § ¯¨á ­ë à §¬¥àë ®âªà뢠¥¬®£®
  39. ;    ¨§®¡à ¦¥­¨ï, ­¥ ®¡ï§ â¥«ì­ë¥ ¯ à ¬¥âàë
  40. ; bytes_p_p - ᪮«ìª® ¡ ©â ¯ ¬ï⨠¡à âì ­  ¯¨ªá¥«ì, ­¥ ®¡ï§ â¥«ì­ë© ¯ à ¬¥âà
  41. ;    ¥á«¨ ­¥ 㪠§ ­ ¡¥à¥âáï 3. Œ¨­¨¬ «ì­®¥ §­ ç¥­¨¥ ¤®«¦­® ¡ëâì ­¥ ¬¥­ìè¥ 3.
  42. macro load_image_file path, buf, img_w, img_h, bytes_p_p
  43. {
  44. local .err_open
  45. local .end_open
  46.  
  47. if path eqtype '' ;¯à®¢¥à塞 § ¤ ­ «¨ áâப®© ¯ à ¬¥âà path
  48.         local .path_str
  49.         jmp @f
  50.                 .path_str db path ;ä®à¬¨à㥬 «®ª «ì­ãî ¯¥à¥¬¥­­ãî
  51.                 db 0
  52.         @@:
  53.         ;32 - áâ ­¤ àâ­ë©  ¤à¥á ¯® ª®â®à®¬ã ¤®«¦¥­ ¡ëâì ¡ãä¥à á á¨á⥬­ë¬ ¯ã⥬
  54.         copy_path .path_str,[32],file_name,0
  55. else
  56.         copy_path path,[32],file_name,0 ;ä®à¬¨à㥬 ¯®«­ë© ¯ãâì ª ä ©«ã ¨§®¡à ¦¥­¨ï, ¯®¤à §ã¬¥¢ ¥¬ çâ® ®­ ¢ ®¤­®© ¯ ¯ª¥ á ¯à®£à ¬¬®©
  57. end if
  58.         mov dword[buf],0
  59.  
  60.     mov [run_file_70.Function], SSF_GET_INFO
  61.     mov [run_file_70.Position], 0
  62.     mov [run_file_70.Flags], 0
  63.     mov dword[run_file_70.Count], 0
  64.     mov dword[run_file_70.Buffer], open_b
  65.     mov byte[run_file_70+20], 0
  66.     mov dword[run_file_70.FileName], file_name
  67.     mcall SF_FILE,run_file_70
  68.         or eax,eax
  69.         jnz .err_open
  70.  
  71.     mov ecx,dword[open_b+32] ;+32 qword: à §¬¥à ä ©«  ¢ ¡ ©â å
  72.     stdcall mem.Alloc,ecx ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥­¨ï
  73.         mov [buf],eax
  74.         mov [run_file_70.Function], SSF_READ_FILE
  75.         mov [run_file_70.Position], 0
  76.         mov [run_file_70.Flags], 0
  77.         mov [run_file_70.Count], ecx
  78.         mov [run_file_70.Buffer], eax
  79.         mov byte[run_file_70+20], 0
  80.         mov [run_file_70.FileName], file_name
  81.         mcall SF_FILE,run_file_70 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
  82.                 test eax,eax
  83.                 jnz .err_open
  84.         cmp ebx,0xffffffff
  85.         je .end_open
  86.                 ;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥­¨ï ¨ ¯¨è¥¬ ¥£® ¯ à ¬¥âàë
  87.                 stdcall [img_decode], [buf],ebx,0
  88.                 mov ebx,eax
  89.                 ;®¯à¥¤¥«ï¥¬ à §¬¥à ¤¥ª®¤¨à®¢ ­­®£® ¨§®¡à ¦¥­¨ï
  90.                 mov ecx,[eax+4] ;+4 = image width
  91. if img_w eq
  92. else
  93.                 mov dword[img_w],ecx
  94. end if
  95. if img_h eq
  96.                 imul ecx,[eax+8] ;+8 = image height
  97. else
  98.                 mov eax,[eax+8] ;+8 = image height
  99.                 mov dword[img_h],eax
  100.                 imul ecx,eax
  101. end if
  102. if bytes_p_p eq
  103.                 imul ecx,3 ;need for r,g,b
  104. else
  105.                 imul ecx,bytes_p_p
  106. end if
  107.                 stdcall mem.ReAlloc,[buf],ecx ;¨§¬¥­ï¥¬ à §¬¥à ¤«ï ¡ãä¥à 
  108.                 mov [buf],eax
  109.                 stdcall [img_to_rgb2], ebx,[buf] ;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥­¨¥ ª ä®à¬ âã rgb
  110.                 stdcall [img_destroy], ebx ;㤠«ï¥¬ ¢à¥¬¥­­ë© ¡ãä¥à á ¯ à ¬¥âà ¬¨ ¨§®¡à ¦¥­¨ï
  111.                         jmp .end_open
  112.                 .err_open:
  113.                         add al,'0'
  114.                         mov byte[txt_err_img_file.n],al
  115. if path eqtype ''
  116.                         mov eax,dword[.path_str]
  117.                         mov dword[txt_err_img_file.f],eax
  118.                         mov eax,dword[.path_str+4]
  119. else
  120.                         mov eax,dword[path]
  121.                         mov dword[txt_err_img_file.f],eax
  122.                         mov eax,dword[path+4]
  123. end if
  124.                         mov dword[txt_err_img_file.f+4],eax
  125.                         mov byte[txt_err_img_file.f+7],0
  126.                         notify_window_run txt_err_img_file
  127.         .end_open:
  128. }
  129.