Subversion Repositories Kolibri OS

Rev

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

  1. ; load picture from file to memory
  2. align 4
  3. open_b rb 560
  4.  
  5. load_picture:
  6.     mov [file_information.Function], SSF_GET_INFO
  7.     mov [file_information.Position], 0
  8.     mov [file_information.Flags], 0
  9.     mov dword[file_information.Count], 0
  10.     mov dword[file_information.Buffer], open_b
  11.     mov byte[file_information+20], 0
  12.     mov dword[file_information.FileName], file_path
  13.     mcall SF_FILE,file_information
  14.         or eax,eax
  15.         jnz .end_open
  16.  
  17.     mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах
  18.         add ecx,mem_screen+mem_panel_b+mem_flood_f
  19.         mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer]
  20.         mov [ScreenPointer],eax
  21.         add eax,mem_screen+mem_panel_b
  22.         sub ecx,mem_screen+mem_panel_b+mem_flood_f
  23.         mov [file_information.Function], SSF_READ_FILE
  24.         mov [file_information.Position], 0
  25.         mov [file_information.Flags], 0
  26.         mov [file_information.Count], ecx
  27.         mov [file_information.Buffer], eax
  28.         mov byte[file_information+20], 0
  29.         mov [file_information.FileName], file_path
  30.         mcall SF_FILE,file_information ;загружаем файл изображения
  31.         cmp ebx,0xffffffff
  32.         je .end_open
  33.                 ;определяем вид изображения и пишем его параметры
  34.                 mov eax,[ScreenPointer]
  35.                 add eax,mem_screen+mem_panel_b
  36.                 stdcall [img_decode], eax,ebx,0
  37.                 push eax
  38.                 ;определяем размер декодированного изображения
  39.                 mov ecx,[eax+4] ;+4 = image width
  40.                 mov dword[Picture_SizeX],ecx
  41.                 mov eax,[eax+8] ;+8 = image height
  42.                 mov dword[Picture_SizeY],eax
  43.                 imul ecx,eax
  44.                 imul ecx,15
  45.                 add ecx,mem_screen+mem_panel_b+mem_flood_f
  46.                 mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer]
  47.                 mov [ScreenPointer],eax
  48.                 call prepare_data_pointers
  49.                 pop ebx
  50.                 stdcall [img_to_rgb2], ebx,[PointerToPicture] ;преобразуем изображение к формату rgb
  51.                 stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения
  52.                 mov [save_flag],1
  53.         .end_open:
  54.         ret
  55.