рд╕рднреА рд╣реИрдмреНрд░рдЬрд╝рд┐рдЯреЗрд▓ рдХреЛ рдмрдзрд╛рдИ!
рдкрд╣рд▓реЗ рдереЛрдбрд╝рд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред рдпрд╣ рдкреЛрд╕реНрдЯ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рд▓рд┐рдЦреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдлрд┐рд░
рднреА рдЕрдкреНрд░рддрд┐рд╖реНрдард┐рдд рдЕрдкрдбреЗрдЯ рджреНрд╡рд╛рд░рд╛:
viklequick рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
рдЬрд┐рджреНрджреА рд╣реИ , рдФрд░, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рднреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП ...
рдЖрд╡рд╛рдЬрд╝ рдХрд╛ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡
рдардВрдб рдХреЗ рдореМрд╕рдо рдореЗрдВ рдПрдХ рдмрд╛рд░,
рд▓реЗрдЦрдХ рдИрдкреАрдПрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡реЗрдХреНрдЯрд░ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд▓рдбрд╝рдиреЗ рдХреЗ
рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рд╕рд╛рдереА рд╕реЗ рдердХ рдЧрдПред рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрд╕рд╡реАрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдбреЛрдм рдЗрдирдбрд┐рдЬрд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдореЗрдВ рдкреНрд░рдЧрддрд┐ рдФрд░ рдЧреНрд░рд╛рдл рдФрд░ рдЪрд╛рд░реНрдЯ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдФрд░ рдлрд┐рд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдирд┐рд░рд╛рд╢рд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Adobe Systems рдЕрдкрдиреЗ Adobe Flash рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ Adobe InDesign SVG рд╕рдорд░реНрдерди рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЪреНрдЫреЗ рд╕рд╛рдереА рдиреЗ рдЗрдирдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рдмрдирд╛рдиреЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЕрдиреБрднрд╡ рдЬрдорд╛ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡реАрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рддреАрди-рд╕рд┐рд░ рд╡рд╛рд▓реЗ рд╣рд╛рдЗрдбреНрд░рд╛ рдХреЛ рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпреЛрджреНрдзрд╛ рдиреЗ рдХрд╣рд╛ - рдпреЛрджреНрдзрд╛ рдиреЗ рдХрд┐рдпрд╛, рдЕрд░реНрдерд╛рддреН - рдЙрд╕рдиреЗ рд▓рд┐рдпрд╛ред
рдЗрд╕ рд╕рдВрдШрд░реНрд╖ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рд╣рдо рдЕрдкрдиреА рдХрд╣рд╛рдиреА рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░реЗрдВрдЧреЗред
рдХрд╣рд╛рдиреАрдЪрд░рдг рдПрдХ, рдпрд╛ рдЯреНрд░рд╛рдЗрд╕реЗрдкреНрд╕ рд╣рд╛рдЗрдбреНрд░рд╛ рдХреЗ рдПрдирд╛рдЯреЙрдореА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВ
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ InDesign рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
InDesign рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЪрд┐рддреНрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ PageItem рд╣реИ рдЬреЛ рд╕реНрд╡рдпрдВ рдЖрдХрд░реНрд╖рд┐рдд рдФрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рдкреЗрдЬ рдХреЛ рдкреЗрдЬ рдкрд░ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рддреЛ рдПрдХ рдлреНрд░реЗрдо рдореЗрдВ рдпрд╛ рдЯреЗрдмрд▓ рд╕реЗрд▓ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд░ рдпрд╣ рд╕рдм рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдлрд┐рд░ рднреА, рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рд╣реИрдВ - рддреЗрдЬ (рдПрдХ рдкрд╛рд░ рдЖрдпрдд рдЦреАрдВрдЪреА рдЧрдИ рд╣реИ), рдЗрд╖реНрдЯрддрдо (рд░реЗрдЦрд╛рдкреБрдВрдЬ рдЫрджреНрдо рдЫрд╡рд┐), рдФрд░ рдкреВрд░реНрдг (рдзреАрдорд╛)ред рдЗрд╕ рд╕рдм рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдпрд╛рдд рдкреНрд▓рдЧ-рдЗрди, рдкреГрд╖реНрда рдЖрдЗрдЯрдо, рдФрд░ рдХрдИ рд╕рд╣рд╛рдпрдХ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
рд╡рд░реНрдЧ
{
kSVGItem,
kDisplayListPageItemBoss,
{
IID_ISHAPE, kSVGShapeImpl,
IID_IINKRESOURCES, kAllProcessInkResourcesImpl,
IID_IFLATTENERUSAGE, kSVGItemFlattenerUsageImpl,
IID_IVISITORHELPER, kEPSItemVisitorHelperImpl,
IID_ISCRIPT, kSVGItemScriptImpl,
}
}
рдФрд░ рдЗрддрдирд╛:
Class
{
kSVGPlaceProviderBoss,
kInvalidClass,
{
IID_IK2SERVICEPROVIDER, kImportServiceImpl,
IID_IIMPORTPROVIDER, kSVGPlaceProviderImpl,
IID_IIMPORTPREVIEW, kSVGImportPreviewImpl,
}
},
рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк / рд╢рдЯрдбрд╛рдЙрди рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рд╣реЗрдбрд░ рднреА рд╣реИ, рдЬреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВ рд╣реИред
тАв IID_ISHAPE рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреГрд╖реНрда рдЖрдЗрдЯрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
тАв IID_IINKRESOURCES - рд╣рдо рдмрд╛рд╣рд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ (рдЗрдВрдХ) рд╕реЗ рд▓рд┐рдВрдХ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред
тАв IID_IFLATTENERUSAGE - рд╣рдо рдкреАрдбреАрдПрдл рдореЗрдВ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рд░реЗрдЦрд╛рдВрдХрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред рджрд░рдЕрд╕рд▓, рдпрд╣ рдПрдХ рдРрд╕реА рд░реЗрдЦрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЪрдкрдЯреЗ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВред
тАв IID_IVISITORHELPER - рдЗрд╕реЗ EPS рд╕реЗ рдЙрдзрд╛рд░ рд▓реЗрдХрд░ рдорд╛рдирдХ рд░рдЦреЗрдВред
тАв IID_ISCRIPT - рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рднреА рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдмрд╕ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
тАв IID_IK2SERVICEPROVIDER рдФрд░ IID_IIMPORTPROVIDER - рдкреНрд▓реЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВред
тАв IID_IIMPORTPREVIEW - рдФрд░ рдлрд╝рд╛рдЗрд▓ рдЪрдпрди рд╕рдВрд╡рд╛рдж (рд╡рд┐рдВрдбреЛрдЬ рд╡рд┐рд╢рд┐рд╖реНрдЯ) рдореЗрдВ рдПрдХ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ IID_ISHAPE рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХрд╛ рджрд┐рд▓ рд╣реИред рдЙрд╕реЗ рд╕реАрдзреЗ IGraphicsPort рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреБрдж рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рд░рд╛рд╕реНрдЯрд░ рдкреНрд░реЙрдХреНрд╕реА рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдкрд░реНрдпрд╛рдкреНрдд рдЖрд╢реНрдЪрд░реНрдп рдереЗред
рджреЛ рдХрджрдо, рдпрд╛ рдПрдХ рд╡реАрд░ рддрд▓рд╡рд╛рд░ рдЪреБрдиреЗрдВ
рдПрдХреНрд╕рдкреНрд░реЗрд╕ googling, рд╕рд╛рде рд╣реА OpenClipArt рд╕реЗ рдирдореВрдирд╛ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рд╕реЗ рдореБрдЭреЗ рдЕрдкрд╛рдЪреЗ рдмрд╛рдЯрд┐рдХ рдореЗрдВ рд░рд╣рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ред рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдмрд╛рдЯрд┐рдХ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рд╡реЗ рдмреЗрд╣реВрджрд╛ рдирд┐рдХрд▓реЗред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ "рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рдПрд╕рд╡реАрдЬреА рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП" рдЙрдмрд▓рд╛ рд╣реБрдЖ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╛рд░реНрдп "IGraphicsPort рдХреЗ рд╕рд╛рде рдПрдХ рддрд╕реНрд╡реАрд░ рдХреИрд╕реЗ рдЦреАрдВрдЪрдирд╛ рд╣реИ" рдХрд╛рд░реНрдп рдмреИрдЯрд┐рдХ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдФрд░ рд╣рдо рдЗрд╕реЗ рд╕рдмрд╕реЗ рдХрдард┐рди рдХреЗ рд░реВрдк рдореЗрдВ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдФрд░ рд╣рдо рдмреЛрд░рд┐рдВрдЧ рд╕реА ++ рд╕рд╛рдорд╛рди рд╕реЗ рдордЬреЗрджрд╛рд░ рдЬрд╛рд╡рд╛ рд░рдЪрдирд╛рддреНрдордХ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╢рд░реНрдордирд╛рдХ minstrels рд╣рдореЗрдВ рдмрддрд╛рдПрдВрдЧреЗ - рдпрд╣ рдЖрдк, рдирд╛рдпрдХ, рдЧрд▓рдд рдХрд╣рд╛рдиреА рдореЗрдВ рднрдЯрдХ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЖрдк рдкрд╛рдВрдЪ рдореАрдЯрд░ рдХрд╛рдВрдЯреЗрджрд╛рд░ рддрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрд╢рд╛ рд╕рд╛рдВрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╣рд╛рдереА рдХреЛ рдкрд╛рд░ рдХрд░рддреЗ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред рдЕрдиреБрднрд╡, рдХрдард┐рди рдЧрд▓рддрд┐рдпреЛрдВ рдХрд╛ рдмреЗрдЯрд╛, рд╣рдореЗрдВ рд╕рд┐рдЦрд╛рддрд╛ рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреБрдЫ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
рдЪрд░рдг рддреАрди, рдпрд╛ рдЖрд░рдВрдн рдХрд░рдирд╛рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд╛рд░реНрдп рд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдЬреЗрдПрдирдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

/**
* Class for reading from InDesign IPMStream
*/
public class PMInputStream extends InputStream
{
/**
* Creates PMInputStream object and attaches it to IPMStream* already
* opened by InDesign.
* @param iPMStreamPtr IPMStream* to attach to
* @throws IOException The stream has no ability to read.
*/
public PMInputStream(long iPMStreamPtr) throws IOException {
this.ownedStreamPtr = iPMStreamPtr;
this.retain();
}
@Override
public int read() throws IOException {
return readByte();
}
@Override
public int read(byte b[], int off, int len) throws IOException {
if (len == 0) return 0;
return readBytes(b, off, len);
}
@Override
public long skip(long n) throws IOException {
return performSeek(n, SeekFromCurrent);
}
public long seek(long numberOfBytes, int fromHere) throws IOException {
return performSeek(numberOfBytes, fromHere);
}
@Override
public int available() {
return availableBytes();
}
// native functions below
...
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореВрд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рд╕реНрд╡рдпрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рд╣реИ, рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ:
/**
* 'Cause IPMStream is a COM-like object we gotta call AddRef() for it
* if we wanna save pointer in our class.
*/
private native void retain();
/**
* Once we called AddRef() we shouldn't forget calling corresponding
* Release(). Let's do it!
*/
private native void release();
рдФрд░ рд╕реВрдЪреА рд╣реА:
protected native int readByte();
protected native int readBytes(byte b[], int off, int len);
protected native long performSeek(long numberOfBytes, int fromHere);
protected native int availableBytes();
protected native String getFileName();
protected native long getLastModifiedTime();
рдкрд┐рдЫрд▓реЗ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕реАрдзреЗ рдХреИрд╢ рддрддреНрд╡реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбреЛрдо рдореЙрдбрд▓ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рди рд╣реЛред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдмрджрд▓рддреЗ рд╕рдордп рдЙрдиреНрд╣реЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдФрд░ рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ рджреЗрд╢реА рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред
class IPMStream; class PMInputStream
{
private:
IPMStream* fStream;
public:
PMInputStream(IPMStream* stream);
~PMInputStream() { close(); }
void close();
int read() {
unsigned char result;
return read(&result, 1) == 1? result: -1;
}
int read(unsigned char* buffer, int len){ return fStream->XferByte(buffer, len); }
XInt64 seek(XInt64 numberOfBytes, SeekFrom fromHere) {
return fStream->Seek((int32)numberOfBytes, fromHere);
}
public:
enum SeekFrom { SeekFromStart = kSeekFromStart,
SeekFromCurrent = kSeekFromCurrent,
SeekFromEnd = kSeekFromEnd
};
};
рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдПрд╕рд╡реАрдЬреА рддрдХ рдкрд╣реБрдВрдЪ рдЪреБрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдХрд╛рдо рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЦреАрдВрдЪрдирд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рдмрдлрд░реНрдбрдореИрдЬ рдореЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдЗрдореЗрдЬ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреА рдкреНрд░реЙрдХреНрд╕реА рдЗрдореЗрдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдмреИрдЯрд┐рдХ рдХреЗ рдПрдХ рдорд╛рдирдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП, рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЦреБрдж рдХреЛ рдЗрд╕ рдлреБрдЯрдХреНрд▓реЙрде рдХреЛ рдпрд╣рд╛рдВ рдирд╣реАрдВ рд▓рд╛рдиреЗ рджреЗрддрд╛ рд╣реВрдВред рдмрдлрд╝рд░реЗрдбрдЗрдореЗрдЬ рд╕реЗ RGB рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PixelGrabber рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИред рд╣рдо AGMImageRecord рдХреЗ рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгреА рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред
рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ BufferedImage рдХреЗ рдмрдЬрд╛рдп IGraphicsPort рдкрд░ рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдорд╛рдирдХ рдСрдлрд╝рд╕реНрдХреНрд░реАрди рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ 2D рдХреЗ рдмрдЬрд╛рдп рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣реА рд╣рдо рдХрд░реЗрдВрдЧреЗред
рдЪреМрдерд╛ рдЪрд░рдг, рдпрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдПрдХ рд╡рд┐рджреНрдпреБрдд рдкреНрд░рд╡рд╛рд╣ рдХреЛ рддрд▓рд╡рд╛рд░ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЪрд┐рдВрдЧрд╛рд░реА рдЙрдбрд╝ рдЬрд╛рдПрдЧреНрд░рд╛рдлрд┐рдХреНрд╕ 2 рдбреА рдХреЗ рд╕рдХреНрд╖рдо рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдмрдбрд╝реА, рдЙрдмрд╛рдК, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рд╣реА рдЕрдкрд╛рдЪреЗ рдмрд╛рдЯрд┐рдХ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ
Paint getPaint(){ return paint; }
рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЧреБрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдПрдХ рд▓рд╛
Paint getPaint(){ return paint; }
Paint getPaint(){ return paint; }
рдУрдЯред
рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд▓рдЧ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ:
public void setXORMode(Color c1){ throw new RuntimeException("setXORMode: N/A"); }
рдФрд░ рдРрд╕реЗ:
public void fillRect(int x, int y, int w, int h) { fill(new Rectangle(x, y, w, h)); }
рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд░рд▓реАрдХрд░рдг рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рдЙрдиреНрдореВрд▓рди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдп рдорд┐рд▓рддреЗ рд╣реИрдВ:
public void draw(Shape s);
public void fill(Shape s);
public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer);
public void drawString(String str, float x, float y);
public void drawString(AttributedCharacterIterator iterator, float x, float y);
рдЖрдк StrokeTextPainter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЧреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕реЗрдЯ рддреАрди рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЕрдЪреНрдЫрд╛ рд╣реИред
рдЕрдм рджреВрд╕рд░реЗ рдкрдХреНрд╖ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ IGraphicsPort рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП:
private native void newpath();
private native void moveto(float x, float y);
private native void lineto(float x, float y);
private native void curveto(float x1, float y1, float x2, float y2, float x3, float y3);
private native void curvetov(float x2, float y2, float x3, float y3);
private native void closepath();
private native void gsave();
private native void grestore();
private native void setlinewidth(float width);
private native void setdash(int len, float[] dashArray, float offset);
private native void setopacity(float opacity, boolean bIsAlphaShape); // from 0 to 1.0
private native void setrgbcolor(float r, float g, float b);
private native void fill();
private native void eofill();
private native void stroke();
private native void image(int[] buffer, int x, int y, int width, int height, double[] transformMatrix);
private native void clip();
private native void eoclip();
рдПрдХ рдЕрдиреБрднрд╡реА рдирдЬрд╝рд░ рдХреЗ рд╕рд╛рде, рдЖрдк рдЧреНрд░реЗрдбрд░ рдЬреИрд╕реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЯреВрд▓реНрд╕ рдХреА рд╕реНрдкрд╖реНрдЯ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд╢, Adobe рджреНрд╡рд╛рд░рд╛ рдПрдкреАрдЖрдИ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдЗрддрдирд╛ рджреБрд░реНрд▓рдн рд╣реИ рдХрд┐ рдореИрдВ рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рдореБрдЭреЗ рд╢рд░реНрдорд╕рд╛рд░ рд╣реЛрдирд╛ рдкрдбрд╝рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдореЗрдВ рдереЛрдбрд╝реА рдЬрд░реВрд░рдд рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИ: рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕ рдкреВрд░реА рдЪреАрдЬрд╝ рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЖрдЗрдП рд╕рд░рд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ - рдЬреНрдпрд╛рдорд┐рддреАрдп рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред
рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рдЬрд╛рд╡рд╛ рд╕реЗ рдЖрдХреГрддрд┐ рдХреЛ рдореВрд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдкрд░ рддреИрдирд╛рдд рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рдирдХ PathIterator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЙрд╕реА рд╕рдордп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдЯрд┐рдХ AffineTransform рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реИ:
private void applyPath(PathIterator pi, int kind) {
float[] coord = new float[6];
int retSeg;
newpath();
while(!pi.isDone()) {
retSeg = pi.currentSegment(coord);
switch (retSeg) {
case SEG_LINETO:
lineto(coord[0], coord[1]);
break;
case SEG_CUBICTO:
curveto(coord[0], coord[1], coord[2], coord[3], coord[4], coord[5]);
break;
case SEG_MOVETO:
moveto(coord[0], coord[1]);
break;
case SEG_QUADTO:
curvetov(coord[0], coord[1], coord[2], coord[3]);
break;
case SEG_CLOSE:
closepath();
break;
}
pi.next();
}
if(kind == PATH_FILL) {
if(pi.getWindingRule() == PathIterator.WIND_EVEN_ODD) eofill();
else fill();
}
else if(kind == PATH_STROKE) stroke();
else if(kind == PATH_CLIP) {
if(pi.getWindingRule() == PathIterator.WIND_EVEN_ODD) eoclip();
else clip();
}
}
рдЕрдм рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЖрджрд┐рдо рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

public void draw(Shape s) {
PathIterator pi = s.getPathIterator(getTransform());
applyClip(getClip());
applyStroke(s);
applyStyles();
applyPath(pi, PATH_STROKE);
restoreClip();
}
рдЕрдм рддрдХ, рд╣рдо рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрд╡реЗрджрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ *, рдЙрдирдХреА рдЪрд░реНрдЪрд╛ рдЖрдЧреЗ рдХреА рдЧрдИ рд╣реИред рд╕рдЦреНрддреА рд╕реЗ рдмреЛрд▓рдирд╛, рднрд░рдирд╛ () рдЧреНрд░реЗрдбрд┐рдПрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рджрд┐рдЦрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, applyClip () рднреА рдЗрд╕реА рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
private void applyClip(Shape xclip) {
gsave();
if(xclip != null) {
PathIterator pi = xclip.getPathIterator(getTransform());
applyPath(pi, PATH_CLIP);
}
}
рдЕрд╕рд▓реА рдХреЛрдб рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдЖрдкрдХреЛ рдЗрдЧреНрд░рд╛рдлрд┐рдХреНрд╕рдкреЙрд░реНрдЯ рдореЗрдВ рдлреНрд▓реИрдЯрдирд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреЛрд▓ рдХреЛ рдореЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдкрде рд╡рд╛рдорд╛рд╡рд░реНрдд рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЪрд▓рд╛ рдЬрд╛рдПред рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд╛рдЯрд┐рдХ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкрд╛рда рдХреЛ рдЧреНрд▓рд┐рдлрд╝ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдХреИрд╕реЗ рд╡реЗрдХреНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рд▓рд┐рдП рдЖрдк рдлреЛрдВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рддреЛ рд╣рдорд╛рд░рд╛ рдкрд╛рда рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЬреНрдпрд╛рдорд┐рддреАрдп рдЖрдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрди рдЬрд╛рддрд╛ рд╣реИред
рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ...