From e7b812b22f604801d50ffe790f632d7303559f1e Mon Sep 17 00:00:00 2001 From: IgorA Date: Mon, 27 Mar 2017 15:19:10 +0000 Subject: [PATCH] add message in macros 'load_img' if can't open image file git-svn-id: svn://kolibrios.org@6879 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/load_img.inc | 96 ++++++++++++++++++++++++++++--------------- 1 file changed, 63 insertions(+), 33 deletions(-) diff --git a/programs/load_img.inc b/programs/load_img.inc index 0850b4fde2..43ac9660c3 100644 --- a/programs/load_img.inc +++ b/programs/load_img.inc @@ -1,20 +1,20 @@ ; -; Макрос для загрузки изображений чрез функции библиотеки libimg. -; Действия которые делает макрос load_image_file: +; 㧪 ࠦ १ 㭪樨 ⥪ libimg. +; ⢨ load_image_file: ; -; Проверяет размер полученного файла с изображением. -; Выделяет под него память и загружает туда файл. -; Определяет размер памяти необходимой для распаковки изображения. -; Перевыделяет память, и распаковывает изображение из форматов jpg, png, ... -; в формат rgb который можно выводить на экран через сист. функцию. -; При необходимости можно также получить размеры открываемого изображения для -; их дальнейшего использования в программе. +; ஢ ࠧ 祭 䠩 ࠦ. +; 뤥 㦠 㤠 䠩. +; । ࠧ 室 ᯠ ࠦ. +; ॢ뤥 , ᯠ뢠 ࠦ ଠ⮢ jpg, png, ... +; ଠ rgb 뢮 ࠭ १ . 㭪. +; 室 ⠪ ࠧ 뢠 ࠦ +; 쭥襣 ᯮ짮 ணࠬ. ; -; В использующей программе должна быть подключена библиотека libimg, -; объявлена переменная file_name размером около 4096 байт, -; а также структура run_file_70 типа FileInfoBlock. +; ᯮ饩 ணࠬ 祭 ⥪ libimg, +;  ६ file_name ࠧ஬ 4096 , +; ⠪ run_file_70 ⨯ FileInfoBlock. -; подключение некоторых необходимых файлов: +; 祭 室 䠩: include 'dll.inc' include 'develop/libraries/box_lib/load_lib.mac' include 'develop/libraries/libs-dev/libio/libio.inc' @@ -22,26 +22,38 @@ include 'develop/libraries/libs-dev/libio/libio.inc' align 4 open_b rb 560 -; path - может быть переменной или строковым параметром -; buf - переменная куда будет записан указатель на изображение в формате rgb, -; в случае если файл не откроется то будет записан 0 -; img_w, img_h - переменные куда будут записаны размеры открываемого -; изображения, не обязательные параметры -; bytes_p_p - сколько байт памяти брать на пиксель, не обязательный параметр -; если не указан берется 3. Минимальное значение должно быть не меньше 3. +txt_err_img_file: +if lang eq ru + db '訡 N' +.n: db '* ⨨ 䠩 ' +else + db 'Error N' +.n: db '*. Can',39,'t open file ' +end if +.f: dd 0,0 + +; path - ६ ப ࠬ஬ +; buf - ६ 㤠 㤥 ᠭ 㪠⥫ ࠦ ଠ rgb, +; 砥 ᫨ 䠩 ஥ 㤥 ᠭ 0 +; img_w, img_h - ६ 㤠 ᠭ ࠧ 뢠 +; ࠦ, 易⥫ ࠬ +; bytes_p_p - ᪮쪮 ᥫ, 易⥫ ࠬ +; ᫨ 㪠 3. 쭮 祭 3. macro load_image_file path, buf, img_w, img_h, bytes_p_p { +local .err_open local .end_open -if path eqtype '' ;проверяем задан ли строкой параметр path + +if path eqtype '' ;஢塞 ப ࠬ path local .path_str jmp @f - .path_str db path ;формируем локальную переменную + .path_str db path ;ନ㥬 ६ db 0 @@: - ;32 - стандартный адрес по которому должен быть буфер с системным путем + ;32 - ⠭ ஬ ⥬ ⥬ copy_path .path_str,[32],file_name,0 else - copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + copy_path path,[32],file_name,0 ;ନ㥬 䠩 ࠦ, ࠧ㬥 ணࠬ end if mov dword[buf],0 @@ -54,10 +66,10 @@ end if mov dword[run_file_70.FileName], file_name mcall SF_FILE,run_file_70 or eax,eax - jnz .end_open + jnz .err_open - mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах - stdcall mem.Alloc,ecx ;выделяем память для изображения + mov ecx,dword[open_b+32] ;+32 qword: ࠧ 䠩 + stdcall mem.Alloc,ecx ;뤥塞 ࠦ mov [buf],eax mov [run_file_70.Function], SSF_READ_FILE mov [run_file_70.Position], 0 @@ -66,13 +78,15 @@ end if mov [run_file_70.Buffer], eax mov byte[run_file_70+20], 0 mov [run_file_70.FileName], file_name - mcall SF_FILE,run_file_70 ;загружаем файл изображения + mcall SF_FILE,run_file_70 ;㦠 䠩 ࠦ + test eax,eax + jnz .err_open cmp ebx,0xffffffff je .end_open - ;определяем вид изображения и пишем его параметры + ;।塞 ࠦ 襬 ࠬ stdcall [img_decode], [buf],ebx,0 mov ebx,eax - ;определяем размер декодированного изображения + ;।塞 ࠧ ஢ ࠦ mov ecx,[eax+4] ;+4 = image width if img_w eq else @@ -90,9 +104,25 @@ if bytes_p_p eq else imul ecx,bytes_p_p end if - stdcall mem.ReAlloc,[buf],ecx ;изменяем размер для буфера + stdcall mem.ReAlloc,[buf],ecx ;塞 ࠧ mov [buf],eax - stdcall [img_to_rgb2], ebx,[buf] ;преобразуем изображение к формату rgb - stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения + stdcall [img_to_rgb2], ebx,[buf] ;८ࠧ㥬 ࠦ ଠ rgb + stdcall [img_destroy], ebx ;㤠塞 ६ ࠬࠬ ࠦ + jmp .end_open + .err_open: + add al,'0' + mov byte[txt_err_img_file.n],al +if path eqtype '' + mov eax,dword[.path_str] + mov dword[txt_err_img_file.f],eax + mov eax,dword[.path_str+4] +else + mov eax,dword[path] + mov dword[txt_err_img_file.f],eax + mov eax,dword[path+4] +end if + mov dword[txt_err_img_file.f+4],eax + mov byte[txt_err_img_file.f+7],0 + notify_window_run txt_err_img_file .end_open: }