Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 halyavin 1
Color	       db 0
2
Counter        db 0
3
LastColor      db 0
4
SizeFile       dd 0
5
;LitlCounter    db 0
6
;LitlColor      db 0
7
save_image:
8
	   ;mov esi,addres_of_file_which_need_compress
9
	   ;mov edi,addres_where_need_to_save_compressed_file
10
	   ;mov ecx,size_of_file_which_need_compress
11
	   mov dl,byte [esi]
12
	   and dl,0xff
13
	   mov [LastColor],dl
14
	   mov [Counter],byte 1
15
	   mov [SizeFile],0
16
	   xor edx,edx
17
	   inc esi
18
  NextColor:;читаем новый цвет из таблицы
19
	   mov dl,byte [esi]
20
	   and dl,0xf
21
	   mov [Color],dl
22
	   cmp dl,[LastColor]
23
	   jne Different
24
	   ;увеличиваем счетчик на 1 и смотрим его значение
25
	   inc [Counter]
26
	   cmp [Counter],16
27
	   jl total
28
	   ;счетчик равен 16,значит нужно сохранить последовательность
29
	   dec [Counter]
30
	   jmp Different
31
	   ;Теперь текущий цвет стал старым,поэтому сохраним его как старый.
32
	   ;Обнулим (сделаем равным 1) счетчик повторений цвета(counter)
33
	   xor eax,eax
34
	   and [Counter],0
35
	   mov al,[Color]
36
	   mov [LastColor],al
37
	   xor eax,eax
38
	   jmp total
39
  Different:;прочитанный цвет не совпадает со старым
40
	   ;значит нужно сохранить старый и установить значения для нового
41
	   ;
42
	   ;сохраняем старый цвет
43
	   dec [Counter]
44
	   call SaveinByte
45
	   ;add [SizeFile],1
46
	   inc edi
47
	   ;устанавливаем значения текущего цвета как старого
48
	   mov dl,[Color]
49
	   mov [LastColor],dl
50
	   mov [Counter],1
51
     total:
52
	   xor edx,edx
53
	   mov dl,[Color]
54
	   mov [LastColor],dl
55
	   inc esi
56
	   dec ecx
57
	   cmp	ecx,0
58
	   jne NextColor
59
	   ;счетчик может быть непустой,поэтому чтобы не терять байтов
60
	   ;сохраним значение счетчика и повторяемое значение
61
	   call SaveinByte
62
	   ret
63
SaveinByte:xor eax,eax
64
	   xor ebx,ebx
65
	   mov al,[Counter]
66
	   shl al,4
67
	   mov bl,[LastColor]
68
	   or al,bl
69
	   mov [edi],al
70
	   inc [SizeFile]
71
	   ret
72
;-----------------------------------------------------------------------
73
LitlCounter db 0
74
LitlColor   db 0
75
      unpakin:
76
           xor edx,edx
77
NextLitlColor:xor edx,edx
78
	   mov dl,byte[esi]
79
	   xor eax,eax
80
	   xor ebx,ebx
81
	   mov al,dl
82
	   mov bl,al
83
	   shr al,4
84
	   and al,0xf
85
	   mov [LitlCounter],al
86
	   and bl,0xf
87
	   mov [LitlColor],bl
88
	   xor eax,eax
89
	   xor ebx,ebx
90
;-------------------------------
91
	   mov al,[LitlColor]
92
       beg:mov [edi],al
93
	   add edi,1
94
	   dec [LitlCounter]
95
	   cmp [LitlCounter],-1
96
	   jne beg
97
	   inc esi
98
	   dec ecx
99
	   jnz NextLitlColor
100
	   ret