рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рджреЛ рд╕рдВрдкреАрдбрд╝рди рдореЛрдб рд╣реИрдВ:
- рджреЛрд╖рд░рд╣рд┐рдд - рдЬрд┐рд╕рдореЗрдВ, рд╡рд┐рдШрдЯрди рдХреЗ рдмрд╛рдж рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдирд┐рдХрдЯрддрдо рдмрд┐рдЯ рдкрд░ рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛;
- рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде - рдЬреЛ рдЪрд┐рддреНрд░ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдмрд╕ рд╕рдВрдкреАрдбрд╝рди рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ, рдЫрд╡рд┐ рдХреЛ Ycbrrette рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдХреЗрд╡рд▓ рдкреИрд▓реЗрдЯ рдХреЛ рдмрджрд▓рдХрд░ рд╣рдо рд╕рдВрдкреАрдбрд╝рди рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
cY = 0.30078125 * R + 0.5859375 * G + 0.11328125 * B
cCb = -0.171875 * R - 0.33984375 * G + 0.51171875 * B + 128
cCr = 0.51171875 * R - 0.4296875 * G - 0.08203125 * B + 128
рд╣рдореЗрдВ рдирд┐рдореНрди рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ:
183 960 - рдореВрд▓ PNG рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░
155 932 - рдПрд╕рдПрд╕рдкреА (рд╕рдВрдкреАрдбрд╝рди рдореЗрдВ 0.2 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ)
122 593 - рдПрд╕рдПрд╕рдкреА (рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде, рдиреБрдХрд╕рд╛рди)
рдЕрдЧрд▓реА рдЫрд╡рд┐ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдХреЗ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
www.libpng.org/pub/png/img_png/16million-pschmidt.png
59852 - рдкреАрдПрдирдЬреА
1428 - рдПрд╕рдПрд╕рдкреА
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдг рд╣реИрдВ:
- рдЫрд╡рд┐ рдХреЛ рдЖрд░рдЬреАрдмреА рд╕рд░рдгреА рдореЗрдВ рдбрд┐рдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ;
- рдпрджрд┐ рд╣рд╛рдирд┐рдкреВрд░реНрдг рдореЛрдб рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ YcbCr рдкреИрд▓реЗрдЯ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреЛрдбрд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдЫрд╡рд┐ рдХреЛ рдкреИрде рдлрд╝рд┐рд▓реНрдЯрд░ (рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░реИрдЦрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдореВрд▓реНрдп рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА) рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдХрд┐рд╕реА рдЧреИрд░-рдЬрдЯрд┐рд▓ рддрд░реАрдХреЗ рд╕реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд╣рдЯрд╛рдирд╛:
I = 4 рд╕реЗ рдпреВрдмрд╛рдЙрдВрдб ( рдмрд╛рдЗрдЯрдЕрд░реЗ ) рдЪрд░рдг 4 <br/>
рдЖрд░ = рдмрд╛рдЗрдЯрдЕрд░реЗ ( i + 0 ) <br/>
g = рдмрд╛рдЗрдЯрдЕрд░реЗ ( i + 1 ) <br/>
b = рдмрд╛рдЗрдЯрдЕрд░реЗ ( i + 2 ) <br/>
рдпрджрд┐ рдирд╣реАрдВ ( lR = R рдФрд░ Lg = g рдФрд░ lB = b ) рдпрд╛ ( Cnt> = MAX_ITERATE ) рддрдм <br/>
рдпрджрд┐ Cnt = MAX_ITERATE рддреЛ Cnt = 0 <br/>
рдмрд╛рдЗрдЯрдЕрд░реЗ ( рдкреЙрд╕ + 0 ) = рдПрд▓рдЖрд░ <br/>
рдмрд╛рдЗрдЯрдЕрд░реЗ ( рдкреЙрдЬрд╝ + 1 ) = рдПрд▓рдЬреА <br/>
рдмрд╛рдЗрдЯрдЕрд░реЗ ( рдкреЙрд╕ 2 ) = рдПрд▓рдмреА <br/>
рдмрд╛рдЗрдЯрдЕрд░реЗ ( рдкреЙрд╕ 3 ) = Cnt <br/>
lR = R <br/>
Lg = g <br/>
lB = b <br/>
pos = pos + 4 <br/>
Cnt = 1 <br/>
рдПрд▓реНрд╕ <br/>
Cnt = Cnt + 1 <br/>
рдЕрдВрдд рдЕрдЧрд░ <br/>
рдЕрдЧрд▓рд╛ - рдмреАрдбрдмреНрд▓реНрдпреВрдЯреА рдХреЛрдбрд┐рдВрдЧ (рдмрд░реЛрдЬрд╝-рд╡реНрд╣реАрд▓рд░ рдкрд░рд┐рд╡рд░реНрддрди), рдЕрд░реНрдерд╛рддреН - рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди - рдЖрд░реНрдХрди, рд▓реЗрдЦрдХ - рджрд┐рдорд┐рддреНрд░реА рдорд╛рд▓рд┐рд╢реЗрд╡;
- рдЕрдЧрд▓рд╛ рдореЗрд░рд╛ рдХрд╛рд░реНрдп рдЖрддрд╛ рд╣реИ, рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдмрд╛рдЗрдЯ рдХреЛ рд╣рдЯрд╛рдХрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдЗрдЯ рдФрд░ рдЙрди рдкрджреЛрдВ рдХреЗ рдПрдХ рдмрд┐рдЯрдореИрдк рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЬрд╣рд╛рдВ рд╕реЗ рдпрд╣ рдмрд╛рдЗрдЯ рд╣рдЯрд╛ рджреА рдЧрдИ рдереАред рдпрд╣ рдЪрд░рдг 3 рдмрд╛рд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЪрдпрдирд┐рдд рдореВрд▓реНрдп);
рдбрд┐рдо рдореИрдВ рдЬрдм рддрдХ
рдбрд┐рдо iCnt рд▓реЙрдиреНрдЧ
рдбрд┐рдо рд╕рд╛рдЗрдЬрд╝рд╕реНрдЯреНрд░реАрдо ( ) рдмрд╛рдЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ
рдбрд┐рдо рдиреНрдпреВрд╕реНрдЯреНрд░реАрдо ( ) рдмрд╛рдЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ
рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд░реВрдк рдореЗрдВ рдордВрдж рдЖрдХрд╛рд░
рдбрд┐рдо SizeLengthReal рд▓рдВрдмреЗ рд╕рдордп рддрдХ
рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд░реВрдк рдореЗрдВ рдордВрджрддрд╛
рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд░реВрдк рдореЗрдВ рдирдИ NewLengthReal
рдбрд┐рдо рдмрд┐рдЯрдкреЛрд╕ рд▓реЙрдиреНрдЧ
рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЖрдХрд╛рд░
рдбрд┐рдо рдлреНрд░реАрдХ ( 255 ) рдЕрд╕ рд▓реЙрдиреНрдЧ
рдмрд╛рдЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдо рдлреНрд░реАрдХрд░
рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдо рдлреНрд░реАрдХрд╛рдЙрдВрдЯ
рдЬрдм рддрдХ рдордВрдж рджрд╣реА
рдЬрдм рддрдХ рдирдИ рдЧрд┐рдирддреА рдордВрдж
рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдбрд┐рдо рдПрдбрдЪрд░
рдбрд┐рдо рдкрд┐рдЫрд▓реЗ рдЪрд╛рд░ рдЬрдм рддрдХ
рдбрд┐рдо рдмрд┐рдЯрдСрд░ ( 7 ) рдмрд╛рдЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ
рдЖрдХрд╛рд░ = UBound ( bts ) + 1
SizeLengthReal = 1024
ReDim SizeStream ( SizeLengthReal )
NewLengthReal = 1024
ReDim NewStream ( NewLengthReal )
I = 0 рд╕реЗ 7 рдХреЗ рд▓рд┐рдП
BitOr ( i ) = ( 2 ^ i )
рдЕрдЧрд▓рд╛
I = 0 рд╕реЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП - 1
рдХрд░рдЪрд░ = рдмреАрдЯреАрдПрд╕ ( рдЖрдИ )
рдлрд╝реНрд░реАрдХ ( рдХрд░рдЫрд╛рд░ ) = рдлрд╝реНрд░реАрдХ ( рдХрд░реНрдХрд░ ) + рез
рдЕрдЧрд▓рд╛
I = 0 рд╕реЗ 255 рдХреЗ рд▓рд┐рдП
рдЕрдЧрд░ рдлреНрд░реАрдХ ( i ) > рдлреНрд░реАрдХрд╛рдЙрдВрдЯ рддрдм
FreqCount = рдлрд╝реНрд░реАрдХ ( i )
рдлреНрд░реАрдЪрдХреНрд░ = рдЖрдИ
рдпрджрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛ
рдЕрдЧрд▓рд╛
I = 0 рд╕реЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП - 1
рдХрд░рдЪрд░ = рдмреАрдЯреАрдПрд╕ ( рдЖрдИ )
рдЕрдЧрд░ ( рдХрд░рдЪрд╣рд░ <> рдлреНрд░реАрдЪрд╛рд░реНрдЬ ) рддрдм
AddChar = AddChar рдпрд╛ BitOr ( BitPos )
рдпрджрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛ
рдмрд┐рдЯрдкреЛрд╕ = рдмрд┐рдЯрдкреЛрд╕ + рез
рдЕрдЧрд░ рдмрд┐рдЯрдкреЛрд╕ = 8 рддреЛ
SizeStream ( SizeLength ) = AddChar
рдпрджрд┐ SizeLength + 10 > SizeLengthReal рддрдм
SizeLengthReal = SizeLengthReal * 2
ReDim рдкрд░рд┐рд░рдХреНрд╖рдг SizeStream ( SizeLengthReal )
рдпрджрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛ
SizeLength = SizeLength + 1
рдмрд┐рдЯрдкреЛрд╕ = реж
AddChar = 0
рдпрджрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛ
рдЕрдЧрд░ ( рдХрд░рдЪрд╣рд░ <> рдлреНрд░реАрдЪрд╛рд░реНрдЬ ) рддрдм
NewStream ( NewLength ) = рдХрд░рдЪрд░
рдпрджрд┐ NewLength + 10 > NewLengthReal рддрдм
NewLengthReal = NewLengthReal * 2
ReDim рд╕рдВрд░рдХреНрд╖рд┐рдд NewStream ( NewLengthReal )
рдпрджрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛ
NewLength = NewLength + 1
рдпрджрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛ
рдЕрдВрддрд┐рдо рдХрдЪрд░ = рдХрд░рдЫрд░
рдЕрдЧрд▓рд╛
'***
'рдЕрдЧрд░ AddChar <> 0 рддреЛ
SizeStream ( SizeLength ) = AddChar
SizeLength = SizeLength + 1
'рдПрдВрдб рдЗрдл
ReDim рд╕рдВрд░рдХреНрд╖рд┐рдд рдмреАрдЯреАрдПрд╕ ( ( SizeLength + NewLength + 4 + 1 + 4 ) )
рдХреЙрд▓ рдХреЙрдкреАрдореЗрд░реА ( bts ( 0 ) , FreqChar, 1 )
CallMemory ( bts ( 1 ) , рдЖрдХрд╛рд░, 4 ) рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ
CallMemory ( bts ( 5 ) , SizeLength, 4 ) рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ
CallMemory ( bts ( 9 ) , SizeStream ( 0 ) , SizeLength ) рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ
рдХреЙрд▓ рдХреЙрдкреАрдореЗрд░реА ( bts ( 9 + SizeLength ) , NewStream ( 0 ) , NewLength )
рдорд┐рдЯрд╛ рдЖрдХрд╛рд░, рдиреНрдпреВрд╕реНрдЯреНрд░реАрдо
- рдФрд░ рдЕрдВрддрд┐рдо рдЪрд░рдг рдХреЛ рдХрд┐рд╕реА рднреА рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рд╣рдлрд╝рдореИрди, рдЕрдВрдХрдЧрдгрд┐рдд, рдЬрд╝рд┐рдк) рдХреЗ рд╕рд╛рде рд╕рдВрдХреБрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рд▓рдЬрд╝рдорд╛ рдХреЛ рд╕реЗрдХ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рдмреНрдмреЗ рдореЗрдВ Jpeg рдХреЛ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА Jpeg2000 рдЬреИрд╕реЗ рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рддрд░рдВрдЧ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рднреА рд╣реЛрддрд╛ рд╣реИред