āĻā§āĻŽāĻŋāĻāĻž
ĐŅивĐĩŅŅŅвŅŅ
āĻā§āĻŦ āĻŦā§āĻļāĻŋ āĻĻāĻŋāĻ¨ āĻāĻā§, āĻ¯āĻāĻ¨ āĻāĻŽāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻŦāĻŋāĻĻā§āĻ¯āĻžāĻ˛āĻ¯āĻŧā§ āĻ
āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻāĻ°āĻ¤āĻžāĻŽ, āĻ¤āĻāĻ¨ "āĻ¤āĻĨā§āĻ¯ āĻ¸ā§āĻ°āĻā§āĻˇāĻžāĻ° āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ" āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻāĻāĻāĻŋ āĻā§āĻ°ā§āĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻāĻŋāĻ˛āĨ¤ āĻ
ā§āĻ¯āĻžāĻ¸āĻžāĻāĻ¨āĻŽā§āĻ¨ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯āĻž GIF āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻŽā§āĻŦā§āĻĄ āĻāĻ°ā§āĨ¤ āĻāĻŽāĻŋ āĻāĻžāĻāĻžāĻ¤ā§ āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋāĨ¤
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻāĻŽāĻŋ āĻāĻŋāĻā§ āĻ¤āĻžāĻ¤ā§āĻ¤ā§āĻŦāĻŋāĻ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŦ, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ āĻā§āĻāĻžāĻŦā§ āĻāĻ āĻā§āĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤
āĻ¤āĻžāĻ¤ā§āĻ¤ā§āĻŦāĻŋāĻ āĻ āĻāĻļ
GIF āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸
GIF (āĻā§āĻ°āĻžāĻĢāĻŋāĻā§āĻ¸ āĻāĻ¨ā§āĻāĻžāĻ°āĻā§āĻā§āĻ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ - āĻāĻŦāĻŋ āĻāĻĻāĻžāĻ¨-āĻĒā§āĻ°āĻĻāĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸) āĻšāĻ˛ āĻā§āĻ°āĻžāĻĢāĻŋāĻ āĻāĻŦāĻŋ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸, āĻ¯āĻž 256āĻāĻŋ āĻ°āĻā§āĻ° āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§ āĻā§āĻŖāĻŽāĻžāĻ¨ā§āĻ° āĻā§āĻˇāĻ¤āĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ āĻ¸āĻāĻā§āĻāĻŋāĻ¤ āĻĄā§āĻāĻž āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽāĨ¤ āĻāĻ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸āĻāĻŋ 1987 āĻ¸āĻžāĻ˛ā§ (GIF87a) CompuServe āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ°āĻžāĻ¸ā§āĻāĻžāĻ° āĻāĻŋāĻ¤ā§āĻ°āĻā§āĻ˛āĻŋ āĻĒā§āĻ°ā§āĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ 1989 āĻ¸āĻžāĻ˛ā§, āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸āĻāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ (GIF89a), āĻ¸ā§āĻŦāĻā§āĻāĻ¤āĻž āĻāĻŦāĻ āĻ ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§āĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤
GIF āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻŦā§āĻ˛āĻ āĻāĻ āĻ¨ āĻāĻā§āĨ¤ āĻāĻ āĻŦā§āĻ˛āĻāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĻā§āĻ°ā§āĻā§āĻ¯ āĻĨāĻžāĻā§ (āĻŦāĻž āĻāĻāĻŋ āĻāĻŋāĻā§ āĻĒāĻ¤āĻžāĻāĻžāĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°ā§), āĻ¤āĻžāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻŦā§āĻ˛āĻ āĻā§āĻĨāĻžāĻ¯āĻŧ āĻ āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻ¤āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻā§āĻ˛ āĻāĻ°āĻž āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ āĻ¸āĻŽā§āĻāĻŦāĨ¤ GIF89a āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻā§ āĻ¸āĻšāĻāĻ¤āĻŽ āĻ¨āĻ¨-āĻ ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§āĻā§āĻĄ GIF āĻāĻŦāĻŋāĻ° āĻāĻ āĻ¨:
āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦā§āĻ˛āĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§, āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻļā§āĻŦāĻŦā§āĻ¯āĻžāĻĒā§ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻ āĻŦā§āĻ˛āĻ āĻāĻŦāĻ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋāĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻā§āĻ°āĻšā§ āĻšāĻŦ:
CT
- āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻŦā§āĻ¯āĻžāĻĒā§ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻā§āĻ° āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĨ¤ āĻāĻ āĻĒāĻ¤āĻžāĻāĻž āĻ¸ā§āĻ āĻāĻ°āĻž āĻĨāĻžāĻāĻ˛ā§, āĻ˛āĻāĻŋāĻā§āĻ¯āĻžāĻ˛ āĻ¸ā§āĻā§āĻ°ā§āĻ¨ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄā§āĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĨā§āĻ āĻā§āĻ˛ā§āĻŦāĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻ āĻļā§āĻ°ā§ āĻšāĻ¤ā§ āĻšāĻŦā§āĨ¤Size
â āĻĒā§āĻ¯āĻžāĻ˛ā§āĻā§āĻ° āĻāĻāĻžāĻ° āĻāĻŦāĻ āĻāĻŦāĻŋāĻ¤ā§ āĻ°āĻā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻžāĨ¤ āĻāĻ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŽāĻžāĻ¨:
āĻāĻ¯āĻŧāĻ¤āĻ¨
āĻ°āĻā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻž
āĻĒā§āĻ¯āĻžāĻ˛ā§āĻā§āĻ° āĻāĻāĻžāĻ°, āĻŦāĻžāĻāĻ
7
256
768
6
128
384
5
64
192
4
32
96
3
16
48
2
8
24
1
4
12
0
2
6
āĻāĻ¨āĻā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ
āĻāĻŽā§āĻ āĻĢāĻžāĻāĻ˛ā§ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻ¨āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻ°āĻ¤ā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻŦā§:
- LSB (Least Significant Bit) āĻĒāĻĻā§āĻ§āĻ¤āĻŋ
- āĻĒā§āĻ¯āĻžāĻ˛ā§āĻ āĻ¸āĻāĻ¯ā§āĻāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ
LSB āĻĒāĻĻā§āĻ§āĻ¤āĻŋ - āĻ¸ā§āĻā§āĻāĻžāĻ¨ā§āĻā§āĻ°āĻžāĻĢāĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĨ¤ āĻāĻāĻŋ āĻāĻ¨āĻā§āĻāĻ¨āĻžāĻ°ā§āĻ° āĻļā§āĻˇ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯ āĻŦāĻŋāĻāĻā§āĻ˛āĻŋāĻā§ (āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻā§āĻ˛ā§āĻŦāĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻ āĻŦāĻžāĻāĻ) āĻ˛ā§āĻāĻžāĻ¨ā§ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻŦāĻŋāĻāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĨ¤
āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ āĻāĻļ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻā§āĻ˛ā§āĻŦāĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻ āĻŦāĻžāĻāĻā§āĻ° āĻļā§āĻˇ āĻĻā§āĻāĻŋ āĻŦāĻŋāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦā§āĨ¤ āĻāĻ° āĻŽāĻžāĻ¨ā§ āĻšāĻ˛ āĻāĻāĻāĻŋ 24-āĻŦāĻŋāĻ āĻāĻŋāĻ¤ā§āĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻ°āĻ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻāĻāĻŋ āĻ˛āĻžāĻ˛, āĻ¨ā§āĻ˛ āĻāĻŦāĻ āĻ¸āĻŦā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻŦāĻžāĻāĻ, āĻāĻ¤ā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻŽā§āĻŦā§āĻĄ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ°āĻā§āĻ° āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ 3/255 āĻā§āĻ°ā§āĻĄā§āĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻŦā§āĨ¤ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨, āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻŽāĻžāĻ¨ā§āĻˇā§āĻ° āĻā§āĻā§ āĻ āĻĻā§āĻļā§āĻ¯ āĻŦāĻž āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°āĻž āĻāĻ āĻŋāĻ¨ āĻšāĻŦā§ āĻāĻŦāĻ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧāĻ¤, āĻ¨āĻŋāĻŽā§āĻ¨-āĻŽāĻžāĻ¨ā§āĻ° āĻ¤āĻĨā§āĻ¯ āĻāĻāĻāĻĒā§āĻ āĻĄāĻŋāĻāĻžāĻāĻ¸ā§ āĻāĻāĻŋ āĻĻā§āĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻšāĻŦā§ āĻ¨āĻžāĨ¤
āĻ¤āĻĨā§āĻ¯ā§āĻ° āĻĒāĻ°āĻŋāĻŽāĻžāĻŖ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻāĻŽā§āĻ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻā§āĻ° āĻāĻāĻžāĻ°ā§āĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°āĻŦā§āĨ¤ āĻ¯ā§āĻšā§āĻ¤ā§ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻā§āĻ° āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ āĻāĻāĻžāĻ° 256 āĻ°āĻā§āĻ°, āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ°āĻā§āĻ° āĻāĻĒāĻžāĻĻāĻžāĻ¨ā§ āĻĻā§āĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻŦāĻŋāĻ āĻ˛ā§āĻāĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĻā§āĻ°ā§āĻā§āĻ¯ (āĻāĻŦāĻŋāĻ¤ā§ āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻ āĻ¸āĻš) 192 āĻŦāĻžāĻāĻāĨ¤ āĻāĻāĻŦāĻžāĻ° āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻāĻŋ āĻāĻŽā§āĻā§ āĻāĻŽā§āĻŦā§āĻĄ āĻāĻ°āĻž āĻšāĻ˛ā§, āĻĢāĻžāĻāĻ˛ā§āĻ° āĻāĻāĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤
āĻĒā§āĻ¯āĻžāĻ˛ā§āĻ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŖ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ, āĻ¯āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° GIF āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ āĻāĻ°ā§āĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻā§āĻ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻ āĻ¸āĻš āĻāĻŋāĻ¤ā§āĻ°āĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻšāĻŦā§āĨ¤ āĻāĻ° āĻ¸āĻžāĻ°āĻŽāĻ°ā§āĻŽ āĻšāĻ˛ āĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻā§āĻ° āĻāĻāĻžāĻ° āĻŦā§āĻĻā§āĻ§āĻŋ āĻāĻ°ā§, āĻ¯āĻžāĻ° āĻĢāĻ˛ā§ āĻāĻžāĻ˛āĻžāĻ° āĻŦāĻžāĻāĻā§āĻ° āĻāĻžāĻ¯āĻŧāĻāĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻŦāĻžāĻāĻ āĻ˛ā§āĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻ¸ā§āĻĨāĻžāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤ āĻ¯āĻĻāĻŋ āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻŋ āĻ¯ā§ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻā§āĻ° āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨ āĻāĻāĻžāĻ° 2 āĻ°āĻ (6 āĻŦāĻžāĻāĻ), āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻŦā§āĻĄā§āĻĄ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ āĻāĻāĻžāĻ° 256 Ã 3â6 = 762 āĻŦāĻžāĻāĻ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻšāĻ˛ āĻāĻŽ āĻā§āĻ°āĻŋāĻĒā§āĻā§āĻā§āĻ°āĻžāĻĢāĻŋāĻ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž; āĻāĻŽāĻŦā§āĻĄ āĻāĻ°āĻž āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻāĻŋ āĻ¯ā§āĻā§āĻ¨ā§ āĻā§āĻā§āĻ¸āĻ āĻāĻĄāĻŋāĻāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒāĻĄāĻŧāĻž āĻ¯āĻžāĻŦā§ āĻ¯āĻĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻāĻŋ āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻāĻ¨āĻā§āĻ°āĻŋāĻĒāĻļāĻ¨ā§āĻ° āĻļāĻŋāĻāĻžāĻ° āĻ¨āĻž āĻšāĻ¯āĻŧāĨ¤
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ āĻ āĻāĻļ
āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻĄāĻŋāĻāĻžāĻāĻ¨
āĻāĻ¨āĻā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻāĻŦāĻ āĻĄāĻŋāĻā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻ
ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻ°āĻā§āĻāĻžāĻŽ āĻĒā§āĻ¯āĻžāĻā§āĻā§ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻŦā§ com.tsarik.steganography
. āĻāĻ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ Encryptor
āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ¸āĻš encrypt
и decrypt
, āĻā§āĻ˛āĻžāĻ¸ Binary
, āĻ¯āĻž āĻŦāĻŋāĻ āĻ
ā§āĻ¯āĻžāĻ°ā§, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ āĻŦā§āĻ¯āĻ¤āĻŋāĻā§āĻ°āĻŽ āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ UnableToEncryptException
и UnableToDecryptException
, āĻ¯āĻž āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ Encryptor
āĻ¯āĻĨāĻžāĻā§āĻ°āĻŽā§ āĻāĻ¨āĻā§āĻĄāĻŋāĻ āĻāĻŦāĻ āĻĄāĻŋāĻā§āĻĄāĻŋāĻ āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĨ¤
āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻĒā§āĻ¯āĻžāĻā§āĻ com.tsarik.programs.gifed
āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ¸āĻš āĻāĻāĻāĻŋ āĻāĻ˛āĻŽāĻžāĻ¨ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻā§āĻ˛āĻžāĻ¸ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻŦā§ main
, āĻāĻĒāĻ¨āĻžāĻā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ; āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ āĻ¯āĻž āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°ā§; āĻāĻŦāĻ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒā§āĻ¯āĻžāĻā§āĻāĨ¤
āĻ
ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽā§āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻĒā§āĻ¯āĻžāĻā§āĻā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻŦā§ com.tsarik.programs.gifed.gif
āĻā§āĻ˛āĻžāĻ¸ GIFEncryptorByLSBMethod
и GIFEncryptorByPaletteExtensionMethod
. āĻāĻ āĻāĻāĻ¯āĻŧ āĻā§āĻ˛āĻžāĻ¸ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻŦā§ Encryptor
.
GIF āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻā§āĻ° āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻŋāĻ¤ā§āĻ° āĻĒā§āĻ¯āĻžāĻ˛ā§āĻā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒā§āĻ°āĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
āĻāĻāĻāĻŋ āĻāĻŦāĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°āĻ¤ā§, āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻļā§āĻ°ā§āĻ¤ā§ āĻŦāĻŋāĻā§āĻ° āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻā§āĻ°āĻŽ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨, āĻ¯āĻž āĻĄāĻŋāĻā§āĻĄāĻžāĻ° āĻĒā§āĻ°āĻĨāĻŽā§ āĻĒāĻĄāĻŧā§ āĻāĻŦāĻ āĻ¸āĻ āĻŋāĻāĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĨ¤ āĻ¯āĻĻāĻŋ āĻāĻāĻŋ āĻŽā§āĻ˛ā§ āĻ¨āĻž, āĻ¤āĻŦā§ āĻāĻāĻŋ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¯ā§ āĻāĻŦāĻŋāĻ¤ā§ āĻā§āĻ¨āĻ āĻ˛ā§āĻāĻžāĻ¨ā§ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ¨ā§āĻāĨ¤ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§āĻ¤ā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻāĻŋāĻ° āĻĻā§āĻ°ā§āĻā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¨āĻŋāĻā§āĻ āĻŽā§āĻ¸ā§āĻā§āĻ° āĻā§āĻā§āĻ¸āĻāĨ¤
āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§āĻ° āĻā§āĻ˛āĻžāĻ¸ āĻĄāĻžāĻ¯āĻŧāĻžāĻā§āĻ°āĻžāĻŽ:
āĻāĻ°ā§āĻŽāĻ¸ā§āĻāĻŋāĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨
āĻĒā§āĻ°ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨āĻā§ āĻĻā§āĻāĻŋ āĻāĻĒāĻžāĻĻāĻžāĻ¨ā§ āĻāĻžāĻ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ: āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻāĻ¨āĻā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻāĻŦāĻ āĻĄāĻŋāĻā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ Encryptor
, āĻā§āĻ˛āĻžāĻ¸ā§ GIFEncryptorByLSBMethod
и GIFEncryptorByPaletteExtensionMethod
, āĻāĻŦāĻ āĻāĻāĻāĻžāĻ° āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨āĨ¤
āĻā§āĻ˛āĻžāĻ¸ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§āĻ¨ GIFEncryptorByLSBMethod
.
āĻā§āĻˇā§āĻ¤ā§āĻ° firstLSBit
и secondLSBit
āĻāĻŽā§āĻā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻŦāĻžāĻāĻā§āĻ° āĻŦāĻŋāĻā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻž āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻāĻŋ āĻĒā§āĻ°āĻŦā§āĻļ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ āĻāĻŦāĻ āĻ¯ā§āĻāĻžāĻ¨ āĻĨā§āĻā§ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻāĻŋ āĻĒāĻĄāĻŧāĻž āĻāĻāĻŋāĻ¤āĨ¤ āĻŽāĻžāĻ checkSequence
āĻāĻŽāĻŦā§āĻĄā§āĻĄ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻ¸ā§āĻŦā§āĻā§āĻ¤āĻŋ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻāĻāĻāĻŋ āĻā§āĻ āĻŦāĻŋāĻ āĻā§āĻ°āĻŽ āĻ¸āĻā§āĻāĻ¯āĻŧ āĻāĻ°ā§āĨ¤ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ getEncryptingFileParameters
āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻāĻŦāĻ āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻĢā§āĻ°āĻ¤ āĻĻā§āĻ¯āĻŧāĨ¤
āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ
ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ encrypt
āĻŦāĻ°ā§āĻ GIFEncryptorByLSBMethod
:
āĻāĻŦāĻ āĻ¤āĻžāĻ° āĻā§āĻĄ:
@Override
public void encrypt(File in, File out, String text) throws UnableToEncodeException, NullPointerException, IOException {
if (in == null) {
throw new NullPointerException("Input file is null");
}
if (out == null) {
throw new NullPointerException("Output file is null");
}
if (text == null) {
throw new NullPointerException("Text is null");
}
// read bytes from input file
byte[] bytes = new byte[(int)in.length()];
InputStream is = new FileInputStream(in);
is.read(bytes);
is.close();
// check format
if (!(new String(bytes, 0, 6)).equals("GIF89a")) {
throw new UnableToEncodeException("Input file has wrong GIF format");
}
// read palette size property from first three bits in the 10-th byte from the file
byte[] b10 = Binary.toBitArray(bytes[10]);
byte bsize = Binary.toByte(new byte[] {b10[0], b10[1], b10[2]});
// calculate color count and possible message length
int bOrigColorCount = (int)Math.pow(2, bsize+1);
int possibleMessageLength = bOrigColorCount*3/4;
int possibleTextLength = possibleMessageLength-2;// one byte for check and one byte for message length
if (possibleTextLength < text.length()) {
throw new UnableToEncodeException("Text is too big");
}
int n = 13;
// write check sequence
for (int i = 0; i < checkSequence.length/2; i++) {
byte[] ba = Binary.toBitArray(bytes[n]);
ba[firstLSBit] = checkSequence[2*i];
ba[secondLSBit] = checkSequence[2*i+1];
bytes[n] = Binary.toByte(ba);
n++;
}
// write text length
byte[] cl = Binary.toBitArray((byte)text.length());
for (int i = 0; i < cl.length/2; i++) {
byte[] ba = Binary.toBitArray(bytes[n]);
ba[firstLSBit] = cl[2*i];
ba[secondLSBit] = cl[2*i+1];
bytes[n] = Binary.toByte(ba);
n++;
}
// write message
byte[] textBytes = text.getBytes();
for (int i = 0; i < textBytes.length; i++) {
byte[] c = Binary.toBitArray(textBytes[i]);
for (int ci = 0; ci < c.length/2; ci++) {
byte[] ba = Binary.toBitArray(bytes[n]);
ba[firstLSBit] = c[2*ci];
ba[secondLSBit] = c[2*ci+1];
bytes[n] = Binary.toByte(ba);
n++;
}
}
// write output file
OutputStream os = new FileOutputStream(out);
os.write(bytes);
os.close();
}
āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ
ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻāĻŦāĻ āĻ¸ā§āĻ°ā§āĻ¸ āĻā§āĻĄ decrypt
āĻŦāĻ°ā§āĻ GIFEncryptorByLSBMethod
:
@Override
public String decrypt(File in) throws UnableToDecodeException, NullPointerException, IOException {
if (in == null) {
throw new NullPointerException("Input file is null");
}
// read bytes from input file
byte[] bytes = new byte[(int)in.length()];
InputStream is = new FileInputStream(in);
is.read(bytes);
is.close();
// check format
if (!(new String(bytes, 0, 6)).equals("GIF89a")) {
throw new UnableToDecodeException("Input file has wrong GIF format");
}
// read palette size property from first three bits in the 10-th byte from the file
byte[] b10 = Binary.toBitArray(bytes[10]);
byte bsize = Binary.toByte(new byte[] {b10[0], b10[1], b10[2]});
// calculate color count and possible message length
int bOrigColorCount = (int)Math.pow(2, bsize+1);
int possibleMessageLength = bOrigColorCount*3/4;
int possibleTextLength = possibleMessageLength-2; // one byte for check and one byte for message length
int n = 13;
// read check sequence
byte[] csBits = new byte[checkSequence.length];
for (int i = 0; i < 4; i++) {
byte[] ba = Binary.toBitArray(bytes[n]);
csBits[2*i] = ba[firstLSBit];
csBits[2*i+1] = ba[secondLSBit];
n++;
}
byte cs = Binary.toByte(csBits);
if (cs != Binary.toByte(checkSequence)) {
throw new UnableToDecodeException("There is no encrypted message in the image (Check sequence is incorrect)");
}
// read text length
byte[] cl = new byte[8];
for (int i = 0; i < 4; i++) {
byte[] ba = Binary.toBitArray(bytes[n]);
cl[2*i] = ba[firstLSBit];
cl[2*i+1] = ba[secondLSBit];
n++;
}
byte textLength = Binary.toByte(cl);
if (textLength < 0) {
throw new UnableToDecodeException("Decoded text length is less than 0");
}
if (possibleTextLength < textLength) {
throw new UnableToDecodeException("There is no messages (Decoded message length (" + textLength + ") is less than Possible message length (" + possibleTextLength + "))");
}
// read text bits and make text bytes
byte[] bt = new byte[textLength];
for (int i = 0; i < bt.length; i++) {
byte[] bc = new byte[8];
for (int bci = 0; bci < bc.length/2; bci++) {
byte[] ba = Binary.toBitArray(bytes[n]);
bc[2*bci] = ba[firstLSBit];
bc[2*bci+1] = ba[secondLSBit];
n++;
}
bt[i] = Binary.toByte(bc);
}
return new String(bt);
}
āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ GIFEncryptorByPaletteExtensionMethod
āĻāĻāĻ āĻ°āĻāĻŽ āĻšāĻŦā§, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻĨā§āĻ¯ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ/āĻĒāĻĄāĻŧāĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻŋāĻ¨ā§āĻ¨āĨ¤
āĻā§āĻ˛āĻžāĻ¸ā§ MainFrame
āĻŽā§āĻĄāĻŧāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧ: encryptImage(Encryptor encryptor)
и decryptImage(Encryptor encryptor)
, āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ°āĻŖ Encryptor
āĻāĻŦāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻ¨ā§āĻāĻžāĻ°āĻ
ā§āĻ¯āĻžāĻā§āĻ āĻāĻ°āĻž, āĻ¯ā§āĻŽāĻ¨ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻĄāĻžāĻ¯āĻŧāĻžāĻ˛āĻ āĻā§āĻ˛āĻž, āĻ¤ā§āĻ°ā§āĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĻā§āĻāĻžāĻ¨ā§ āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ; āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ: openImage()
, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻāĻāĻāĻŋ āĻāĻŦāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻžāĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧ, exit()
, āĻ¯āĻž āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻĨā§āĻā§ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻ°ā§āĨ¤ āĻāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĨā§āĻā§ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ Action
āĻāĻ° āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻŽā§āĻ¨ā§ āĻāĻāĻā§āĻŽāĨ¤ āĻāĻ āĻļā§āĻ°ā§āĻŖā§āĻāĻŋ āĻ
āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤āĻāĻžāĻŦā§ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°ā§: createComponents()
- āĻĢāĻ°ā§āĻŽ āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻ¤ā§āĻ°āĻŋ, loadImageFile(File f)
â āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻˇ āĻāĻĒāĻžāĻĻāĻžāĻ¨ā§ āĻāĻāĻāĻŋ āĻāĻŦāĻŋ āĻ˛ā§āĻĄ āĻāĻ°āĻž āĻšāĻā§āĻā§āĨ¤ āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ GIFEncryptorByPaletteExtensionMethod
āĻā§āĻ˛āĻžāĻ¸ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻ
āĻ¨ā§āĻ°ā§āĻĒ GIFEncryptorByLSBMethod
, āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻšāĻ˛ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻ āĻĨā§āĻā§ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻŦāĻžāĻāĻ āĻ˛ā§āĻāĻž āĻ āĻĒāĻĄāĻŧāĻž āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§āĨ¤
āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻ āĻĒāĻžāĻ°ā§āĻļāĻ¨
āĻāĻ˛āĻŦāĻŋāĻāĻ¸ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ
āĻ§āĻ°āĻž āĻ¯āĻžāĻ āĻāĻāĻ°āĻāĻŽ āĻāĻāĻāĻŋ āĻāĻŦāĻŋ āĻāĻā§:
āĻāĻ āĻāĻŋāĻ¤ā§āĻ°āĻāĻŋāĻ¤ā§, āĻĒā§āĻ¯āĻžāĻ˛ā§āĻāĻāĻŋāĻ¤ā§ 256āĻāĻŋ āĻ°āĻ āĻ°āĻ¯āĻŧā§āĻā§ (āĻ¯ā§āĻŽāĻ¨ āĻĒā§āĻāĻ¨ā§āĻ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°ā§)āĨ¤ āĻĒā§āĻ°āĻĨāĻŽ āĻāĻžāĻ°āĻāĻŋ āĻ°āĻ āĻšāĻ˛: āĻ¸āĻžāĻĻāĻž, āĻāĻžāĻ˛ā§, āĻ˛āĻžāĻ˛, āĻ¸āĻŦā§āĻāĨ¤ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ°āĻ āĻāĻžāĻ˛ā§āĨ¤ āĻā§āĻ˛ā§āĻŦāĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻ˛ā§āĻ āĻŦāĻŋāĻ āĻā§āĻ°āĻŽ āĻ¨āĻŋāĻŽā§āĻ¨āĻ°ā§āĻĒ āĻšāĻŦā§:
11111111 11111111 11111111 00000000 00000000 00000000 11111111 00000000 00000000 00000000 11111111 00000000...
āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻāĻŋ āĻāĻŽā§āĻŦā§āĻĄ āĻšāĻ¯āĻŧā§ āĻā§āĻ˛ā§, āĻāĻ¨ā§āĻĄāĻžāĻ°āĻ˛āĻžāĻāĻ¨ āĻāĻ°āĻž āĻŦāĻŋāĻāĻā§āĻ˛āĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻŦāĻŋāĻāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻšāĻŦā§āĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ āĻāĻŋāĻ¤ā§āĻ°āĻāĻŋ āĻŽā§āĻ˛ āĻĨā§āĻā§ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻāĻ˛āĻžāĻĻāĻž āĻ¨āĻ¯āĻŧāĨ¤
āĻŽā§āĻ˛
āĻāĻŽāĻŦā§āĻĄā§āĻĄ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ¸āĻš āĻāĻŋāĻ¤ā§āĻ°
āĻĒā§āĻ¯āĻžāĻ˛ā§āĻ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŖ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻāĻ¨ āĻāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ¸āĻŽā§āĻŦāĻ˛āĻŋāĻ¤ āĻāĻāĻāĻŋ āĻāĻŋāĻ¤ā§āĻ° āĻā§āĻ˛āĻŦā§āĻ¨, āĻ¤āĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻŦāĻŋāĻāĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§āĻ¨:
āĻāĻāĻž āĻ¸ā§āĻĒāĻˇā§āĻ āĻ¯ā§ āĻāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻāĻŋ āĻĒā§āĻ°ā§āĻŖāĻžāĻā§āĻ āĻā§āĻĒā§āĻ¤āĻāĻ°āĻŦā§āĻ¤ā§āĻ¤āĻŋāĻ° āĻāĻžāĻ°ā§āĻ¯āĻāĻ˛āĻžāĻĒā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ āĻāĻ°āĻŦā§ āĻ¨āĻž āĻāĻŦāĻ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻ
āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻāĻ¨āĻā§āĻ°āĻŋāĻĒāĻļāĻ¨ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻ ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§āĻā§āĻĄ āĻāĻŋāĻ¤ā§āĻ°āĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻ¨āĻā§āĻ°āĻŋāĻĒāĻļāĻ¨/āĻĄāĻŋāĻā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻāĻŋāĻ¤ā§āĻ°āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ¤ā§āĻ āĻāĻžāĻ āĻāĻ°ā§, āĻ¤āĻŦā§ āĻ ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§āĻļāĻ¨āĻāĻŋ āĻā§āĻā§ āĻ¯āĻžāĻ¯āĻŧ āĻ¨āĻžāĨ¤
āĻāĻ¤ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤:
http://ru.wikipedia.org/wiki/Gif http://ru.wikipedia.org/wiki/ĐĄŅĐĩĐŗĐ°ĐŊĐžĐŗŅĐ°ŅиŅ http://home.onego.ru/~chiezo/gif.htm
āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°ā§āĻ¨:
āĻāĻ¤ā§āĻ¸: www.habr.com