Libs-dev/libimg/ru
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
libimg.obj - это библиотека с помощью которой можно выводить на экран файлы в форматах bmp, jpg, png. Для вывода изображений на экран можно использовать системную ф. 7. Перед выводом изображение нужно перевести в формат rgb.
Поддерживаемые форматы и глубина цвета для img_encode
PNG: 24, 32
BMP: 24, 32
PNM: 1, 8g, 24
Пример вывода файла *.png на экран
Для компиляции в include нужно указать полный путь к папке svn. Программа выводит на экран файл some_file.png размером 200 на 100 пикселей. Для вывода другой картинки нужно указать ее имя и размеры в коде. Подразумевается, что картинка лежит в одной папке с программой.
use32
org 0x0
db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
dd 0x1
dd start
dd i_end ;размер приложения
dd mem
dd stacktop
dd 0x0
dd sys_path
include 'svn/programs/macros.inc'
include 'svn/programs/proc32.inc'
include 'svn/programs/develop/libraries/box_lib/load_lib.mac'
include 'svn/programs/dll.inc'
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
struct FileInfoBlock
Function dd ?
Position dd ?
Flags dd ?
Count dd ?
Buffer dd ?
db ?
FileName dd ?
ends
IMAGE_FILE_SIZE equ 200*100*3 ;размер файла с изображением 200 x 100
fn_icon1 db 'some_file.png',0 ;имя файла с изображением
align 4
start:
load_libraries l_libs_start,load_lib_end
;проверка на сколько удачно загузилась наша либа
mov ebp,lib1
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall -1 ;exit not correct
@@:
stdcall mem.Alloc, dword IMAGE_FILE_SIZE ;выделяем память для изображения
mov [image_data_rgb],eax
copy_path fn_icon1,sys_path,file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
mov eax,70 ;70-я функция работа с файлами
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov [run_file_70.Count], dword IMAGE_FILE_SIZE
m2m [run_file_70.Buffer], [image_data_rgb]
mov byte[run_file_70+20], 0
mov [run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;загружаем файл изображения
cmp ebx,0xffffffff
je @f
;определяем вид изображения и переводим его во временный буфер image_data
stdcall dword[img_decode], dword[image_data_rgb],ebx,0
mov dword[image_data],eax
;преобразуем изображение к формату rgb
stdcall dword[img_to_rgb2], dword[image_data],dword[image_data_rgb]
;удаляем временный буфер image_data
stdcall dword[img_destroy], dword[image_data]
@@:
mcall 40,0x27
mcall 48,3,sc,sizeof.system_colors ;получаем системные цвета
align 4
red_win:
call draw_window
align 4
still: ;главный цикл
mov eax,10
mcall
cmp al,0x1 ;изменилось положение окна
jz red_win
cmp al,0x2
jz key
cmp al,0x3
jz button
jmp still
align 4
key:
push eax ebx
mcall 2
;...
pop ebx eax
jmp still
align 4
draw_window:
pushad
mcall 12,1
xor eax,eax
mov ebx,20*65536+320
mov ecx,20*65536+240
mov edx,[sc.work]
or edx,0x33000000
mov edi,hed
mcall ;создание окна
mov ecx,(200 shl 16)+100 ;размеры изображения 200 x 100
mov edx,(10 shl 16)+10 ;отступы слева и сверху по 10 пикселей
mcall 7,[image_data_rgb] ;вывод изображения на экран
mcall 12,2
popad
ret
head_f_i:
head_f_l db 'Системная ошибка',0
err_message_found_lib1 db 'Не удалось найти библиотеку libimg.obj',0
err_message_import1 db 'Ошибка при импорте библиотеки libimg.obj',0
system_dir1 db '/sys/lib/'
libimg_name db 'libimg.obj',0
;library structures
l_libs_start:
lib1 l_libs libimg_name, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l, libimg_import, err_message_import1, head_f_i
load_lib_end:
align 4
button:
mcall 17 ;получить код нажатой кнопки
cmp ah,1
jne still
.exit:
stdcall mem.Free,[image_data_rgb] ;освобождаем память
mcall -1 ;выход из программы
image_data dd 0 ;память для преобразования картинки функциями libimg
image_data_rgb dd 0 ;память с преобразованным изображением в формате rgb
run_file_70 FileInfoBlock
hed db 'Draw image 30.06.10',0 ;подпись окна
sc system_colors ;системные цвета
align 4
libimg_import:
dd alib_init1
img_is_img dd aimg_is_img
img_info dd aimg_info
img_from_file dd aimg_from_file
img_to_file dd aimg_to_file
img_from_rgb dd aimg_from_rgb
img_to_rgb dd aimg_to_rgb
img_to_rgb2 dd aimg_to_rgb2
img_decode dd aimg_decode
img_encode dd aimg_encode
img_create dd aimg_create
img_destroy dd aimg_destroy
img_destroy_layer dd aimg_destroy_layer
img_count dd aimg_count
img_lock_bits dd aimg_lock_bits
img_unlock_bits dd aimg_unlock_bits
img_flip dd aimg_flip
img_flip_layer dd aimg_flip_layer
img_rotate dd aimg_rotate
img_rotate_layer dd aimg_rotate_layer
img_draw dd aimg_draw
dd 0,0
alib_init1 db 'lib_init',0
aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
aimg_info db 'img_info',0
aimg_from_file db 'img_from_file',0
aimg_to_file db 'img_to_file',0 ;not implemented
aimg_from_rgb db 'img_from_rgb',0
aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB
aimg_to_rgb2 db 'img_to_rgb2',0
aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных
aimg_encode db 'img_encode',0 ;supported formats: PNG 24 32, BMP 24 32, PNM 1 8g 24
aimg_create db 'img_create',0
aimg_destroy db 'img_destroy',0
aimg_destroy_layer db 'img_destroy_layer',0
aimg_count db 'img_count',0
aimg_lock_bits db 'img_lock_bits',0
aimg_unlock_bits db 'img_unlock_bits',0
aimg_flip db 'img_flip',0
aimg_flip_layer db 'img_flip_layer',0
aimg_rotate db 'img_rotate',0
aimg_rotate_layer db 'img_rotate_layer',0
aimg_draw db 'img_draw',0
i_end:
rb 1024
stacktop:
sys_path rb 4096
file_name:
rb 4096
plugin_path:
rb 4096
openfile_path:
rb 4096
filename_area:
rb 256
mem: