forked from KolibriOS/kolibrios
32bb153b9f
- use 'libimg.obj' - can open *.jpg and *.png files git-svn-id: svn://kolibrios.org@6328 a494cfbc-eb01-0410-851d-a64ba20cac60
55 lines
2.0 KiB
PHP
55 lines
2.0 KiB
PHP
; load picture from file to memory
|
||
align 4
|
||
open_b rb 560
|
||
|
||
load_picture:
|
||
mov [file_information.Function], SSF_GET_INFO
|
||
mov [file_information.Position], 0
|
||
mov [file_information.Flags], 0
|
||
mov dword[file_information.Count], 0
|
||
mov dword[file_information.Buffer], open_b
|
||
mov byte[file_information+20], 0
|
||
mov dword[file_information.FileName], file_path
|
||
mcall SF_FILE,file_information
|
||
or eax,eax
|
||
jnz .end_open
|
||
|
||
mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах
|
||
add ecx,(1200*1000)*3+50*(20*20*3)+500000+16000+0x4000
|
||
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer]
|
||
mov [ScreenPointer],eax
|
||
add eax,0x10000
|
||
sub ecx,(1200*1000)*3+50*(20*20*3)+500000+16000+0x4000
|
||
mov [file_information.Function], SSF_READ_FILE
|
||
mov [file_information.Position], 0
|
||
mov [file_information.Flags], 0
|
||
mov [file_information.Count], ecx
|
||
mov [file_information.Buffer], eax
|
||
mov byte[file_information+20], 0
|
||
mov [file_information.FileName], file_path
|
||
mcall SF_FILE,file_information ;загружаем файл изображения
|
||
cmp ebx,0xffffffff
|
||
je .end_open
|
||
;определяем вид изображения и пишем его параметры
|
||
mov eax,[ScreenPointer]
|
||
add eax,0x10000
|
||
stdcall [img_decode], eax,ebx,0
|
||
push eax
|
||
;определяем размер декодированного изображения
|
||
mov ecx,[eax+4] ;+4 = image width
|
||
mov dword[Picture_SizeX],ecx
|
||
mov eax,[eax+8] ;+8 = image height
|
||
mov dword[Picture_SizeY],eax
|
||
imul ecx,eax
|
||
imul ecx,15
|
||
add ecx,(1200*1000)*3+50*(20*20*3)+500000+16000+0x4000
|
||
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer]
|
||
mov [ScreenPointer],eax
|
||
call prepare_data_pointers
|
||
pop ebx
|
||
stdcall [img_to_rgb2], ebx,[PointerToPicture] ;преобразуем изображение к формату rgb
|
||
stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения
|
||
mov [save_flag],1
|
||
.end_open:
|
||
ret
|