рдХреИрд╕реЗ рдПрдХ рдЕрдЪреНрдЫреЗ рдпреБрд╡рд╛ рдЖрджрдореА рдХреА рдХрд╣рд╛рдиреА рддреАрди рд╕рд┐рд░ рд╡рд╛рд▓реЗ рд╕рд╛рдВрдк рд╕реЗ рд▓рдбрд╝рддреА рд╣реИ, рдпрд╛ рдПрдбреЛрдм рдЗрдирдбрд┐рдЬрд╛рдЗрди рдбреЙрдХреНрдпреВрдореЗрдВрдЯреНрд╕ рдореЗрдВ рдПрд╕рд╡реАрдЬреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреИрд╕реЗ рдПрдореНрдмреЗрдб рдХрд░реЗрдВ - рднрд╛рдЧ рджреЛ

Wiklequick рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ ред

рдкрд╛рдВрдЪ рдЪрд░рдг, рдпрд╛ рдХрд╛рд░реНрдп рд╢реИрд▓реА рдореЗрдВ рд╢рд░рд╛рдмреА рдорд╛рд╕реНрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
рдЕрдм, рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрджрд┐рдо рд╣реИрдВ, рдЪрд▓реЛ рд░рдВрдЧреЛрдВ, рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдФрд░ рд░реЗрдЦрд╛ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

  рдирд┐рдЬреА рд╢реВрдиреНрдп applyStroke (рдЖрдХреГрддрд┐ рдЖрдХреГрддрд┐) {
   рд╕реНрдЯреНрд░реЛрдХ рд╕реНрдЯреНрд░реЛрдХ = getStroke ();
   рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо t = getTransform ();
   рдЕрдЧрд░ (рд╕реНрдЯреНрд░реЛрдХ! = рдЕрд╢рдХреНрдд) {
     рдЕрдЧрд░ (рд╕реНрдЯреНрд░реЛрдХ рдЗрдВрд╕реНрдЯрд╛рдлреЙрд░реЗрдХреНрд╖реН рдмреЗрд╕рд┐рдХрд╕реНрдЯреНрд░реЛрдХ) {
       рдмреЗрд╕рд┐рдХрд╕реНрдЯреНрд░реЛрдХ рдХрд░реНрд╕реНрдЯреНрд░реЛрдХ = (рдмреЗрд╕рд┐рдХрд╕реНрдЯреНрд░реЛрдХ) рд╕реНрдЯреНрд░реЛрдХ;
       рдлреНрд▓реЛрдЯ [] ff = curStroke.getDashArray ();
       if (ff! = null) setdash (ff.length, ff, currStroke.getDashPhase ());
       рдлреНрд▓реЛрдЯ рдЪреМрдбрд╝рд╛рдИ = (рдлреНрд▓реЛрдЯ) (рдХрд░рдорд╕реНрдЯреНрд░реЛрдХ.рдЧреЗрдЯрд▓рд╛рдЗрдирдбрд┐рде () * рдореИрде.рдореИрдХреНрд╕ (t.getScaleX (), t.getScaleY ()));
       if (рдЪреМрдбрд╝рд╛рдИ <0.7f) рдЪреМрдбрд╝рд╛рдИ = 0.7f;
       setlinewidth (рдЪреМрдбрд╝рд╛рдИ);
     }
     рдФрд░ {
       рд╕реЗрдЯрд▓рд╛рдЗрдирд╡реЗрдбреНрде (1.0f);
       рдЖрдХреГрддрд┐ рд╕реНрдЯреНрд░реЛрдХрдХреИрдк = рд╕реНрдЯреНрд░реЛрдХ.рдХреНрд░рд┐рдХреЗрдЯ рд╕реНрдЯреНрд░реЛрдХреНрдбрд╢реИрдк (рдЖрдХрд╛рд░);
       fill (strokedShape);
     }
   }
   рдЕрдиреНрдпрдерд╛ 
     рд╕реЗрдЯрд▓рд╛рдЗрдирд╡реЗрдбреНрде (1.0f);
 }

рдЫрд╡рд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдмрд╕ рдПрдХ BasicStroke рдкрд╛рд░реНрд╕рд┐рдВрдЧред рдпрджрд┐ рдпрд╣ рдХреБрдЫ рдФрд░ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЖрдХреГрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рдЦреАрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдмрд╛рдж рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрд▓реНрдлрд╛ рд╕реНрддрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ InDesign рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдХреЛрдб рднреА рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред

  рдирд┐рдЬреА рд╢реВрдиреНрдп рд▓рд╛рдЧреВ () {
   рдлреНрд▓реЛрдЯ рдЕрд▓реНрдлрд╛ = 1.0f;
   рд╕рдордЧреНрд░ COMP = getComposite ();
   рдЕрдЧрд░ (COMP! = null && comp Instof AlphaComposite) {
     AlphaComposite alcomp = (AlphaComposite) COMP;
     рдЕрд▓реНрдлрд╝рд╛ = alcomp.getAlpha ();
   }
   рдЕрд╕реНрддрд╡реНрдпрд╕реНрддрддрд╛ (рдЕрд▓реНрдлрд╛, рд╕рдЪ);
 } 

рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рдкреЗрдВрдЯ рдФрд░ рдХрдВрдкреЛрдЬрд┐рдЯ рд╕реЗ рд╕реНрдерд┐рддрд┐ рдмрд╣реБрдд рджреБрдЦрдж рд╣реИред рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ рдЦреБрдж рдХреЛ рдЦрддрд░реЗ рдореЗрдВ рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред

  рдирд┐рдЬреА рдмреВрд▓рд┐рдпрди рд▓рд╛рдЧреВ (рдЖрдХрд╛рд░) {
   рдкреЗрдВрдЯ рдкреЗрдВрдЯ = getPaint ();
   рдЕрдЧрд░ (рдкреЗрдВрдЯ рдЗрдВрд╕реНрдЯрд╛рдлреЙ рдХрд▓рд░) {
     рд░рдВрдЧ cc = (рд░рдВрдЧ) рдкреЗрдВрдЯ;
     setrgbcolor (cc.getRed () / 255.0f, cc.getGreen () / 255.0f, cc.getBlue () / 255.0f);
     if (cc.getAlpha) ()! = 0 && cc.getAlpha ()! = 255) рд╕реЗрдЯрдкреЗрд╕рд┐рдЯреА (cc.getAlpha () / 255.0f, true);
     рдФрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ;
   }
   рдФрд░ рдЕрдЧрд░ (рдкреЗрдВрдЯ! = null && рдЖрдХрд╛рд░! = null) {
     applyAlpha ();
     drawGradientAsBackground (рдЖрдХрд╛рд░, рдкреЗрдВрдЯ);
     рдЭреВрдареЗ рд▓реМрдЯрдирд╛;
   }

   рд╕рдордЧреНрд░ COMP = getComposite ();
   рдЕрдЧрд░ (COMP! = null && !! (COMP Instof AlphaComposite) && shape! = null) {
     drawCustomComposite (рдЖрдХрд╛рд░, COMP);
     рдЭреВрдареЗ рд▓реМрдЯрдирд╛;
   }
   рд╕рдЪ рд▓реМрдЯрдирд╛;
 } 

рд░рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИ (рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдмрд╛рдХреА рд╕рднреА рдХреЛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реА / рдЧрд▓рдд рд╣реИред рд╕рддреНрдп рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЛрдИ рдЪрд╛рд▓ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХреА рдЧрдИ рдереА, рдФрд░ рд╡рд░реНрддрдорд╛рди рдЖрдХрд╛рд░ рдХреЛ рднрд░рдирд╛ () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреАрдВрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЭреВрда рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдХрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЗ рд░реВрдк рдореЗрдВ rasterized рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЪрд┐рддреНрд░ рдХреЗ рдКрдкрд░ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдврд╛рд▓ рдХреЛ рдЗрд╕ рддрд░рд╣ рдЦреАрдВрдЪрдирд╛ рдкрдбрд╝рд╛:

  рдирд┐рдЬреА рд╢реВрдиреНрдп рдбреНрд░реЙрдЧрд┐рдПрд░рд┐рдПрдВрдЯрдПрдмреИрдХреНрд╕рдЧреНрд░рд╛рдЙрдВрдб (рдЖрдХреГрддрд┐ рдЖрдХрд╛рд░, рдкреЗрдВрдЯ рдкреЗрдВрдЯ) {
   GraphicsConfiguration conf = getDeviceConfiguration ();
   рдкреЗрдВрдЯрдХреЛрдЯреЗрдХреНрд╕реНрдЯ pctx = paint.createContext (
     conf.getColorModel (), conf.getBounds (), shape.getBounds2D (),
     getTransform (), getRenderingHints ());

   рдЖрдпрдд r = getTransform ()ред CreateTransformedShape (рдЖрдХреГрддрд┐) .getBounds ();
   рд░реЗрдЦрд╛рдкреБрдВрдЬ рд░реЗрдЦрд╛рдкреБрдВрдЬ = pctx.getRaster (рдЖрд░рдПрдХреНрд╕, рдЖрд░рд╡рд╛рдИ, рдЖрд░.рдУрд╡рд░реНрд╢рди, рдЖрд░.рд╣рд╛рдИрдЯ);
   ColorModel cmodel = pctx.getColorModel ();
   рдмрдлрд╝рд░рдЗрдореЗрдЬ bfi = рдирдпрд╛ рдмрдлрд╝рд░рдореИрдЬрд╝ (cmodel, raster.createCompatibleWritableRaster (),)
     cmodel.isAlphaPremultiplied (), null);
   bfi.setData (raster);
  
   int [] argbBuf = getBuf (bfi, r.width, r.height);
   рдЕрдЧрд░ (argbBuf! = null) {
     applyClip (рдЖрдХрд╛рд░);
     drawImage (argbBuf, rx, ry, r.width, r.height, new AffineTransform ());
     рд░рд┐рд╕реНрдЯреЛрд░рдХреНрд▓рд┐рдк ();
   }
   pctx.dispose ();
 } 

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдврд╛рд▓ рдХреЛ рдСрдлрд╕реНрдХреНрд░реАрди рдЫрд╡рд┐ рдкрд░ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдХрд╛рд░ рд╣реА рдХреНрд▓рд┐рдкрд┐рдВрдЧ рдЪрд┐рддреНрд░ рд╣реЛрддрд╛ рд╣реИред рдЙрд╕реА рддрд░рд╣ рд╣рдо рдЧреИрд░-рдорд╛рдирдХ рдХрдВрдкреЛрдЬрд┐рдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ:

  рдирд┐рдЬреА рд╢реВрдиреНрдп drawCustomComposite (рдЖрдХрд╛рд░ рдЖрдХреГрддрд┐, рд╕рдордЧреНрд░ COMP) {
   рдЖрдпрдд r = getTransform ()ред CreateTransformedShape (рдЖрдХреГрддрд┐) .getBounds ();
   рдмрдлрд╝рд░реЗрдбрдЗрдореЗрдЬ bfi = рдирдпрд╛ рдмрдлрд╝рд░рдореИрдбрдо (r.width, r.height, BufferedImage.TYPE_INT_ARGB);
   Graphics2D g2 = (Graphics2D) bfi.getGraphics ();
   g2.setTransform (getTransform ());
   g2.setComposite (COMP);
   g2.fill (рдЖрдХрд╛рд░);
   g2.dispose ();
  
   int [] argbBuf = getBuf (bfi, r.width, r.height);
   рдЕрдЧрд░ (argbBuf! = null) {
     applyClip (рдЖрдХрд╛рд░);
     drawImage (argbBuf, rx, ry, r.width, r.height, new AffineTransform ());
     рд░рд┐рд╕реНрдЯреЛрд░рдХреНрд▓рд┐рдк ();
   }
 } 

рдЪреВрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реВрдкрд╛рдВрддрд░рд┐рдд рдЖрдХреГрддрд┐ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдбреНрд░рд╛рдЗрдореЗрдЬ рдореЗрдВ рд╣рдо рдПрдХ рдЦрд╛рд▓реА AffineTransform рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдЫрдард╛ рдЪрд░рдг, рдпрд╛ рд╣рдо рдкреНрд░рддрд┐рдХреВрд▓ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ
рдЫрд╡рд┐ рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдПред рдпрджрд┐ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХрд▓-рдкрдВрдХреНрддрд┐ рдХреЛрдб рд╣реИ, рддреЛ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЪрд┐рддреНрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рджреВрдВрдЧрд╛:

  рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмреВрд▓рд┐рдпрди рдбреНрд░рд╛рдЗрдореЗрдЬ (рдЫрд╡рд┐ img, int x, int y, int рдЪреМрдбрд╝рд╛рдИ, int рдКрдВрдЪрд╛рдИ, рд░рдВрдЧ bgcolor, ImageObserver рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ) {
   int [] argbBuf = getBuf (img, рдЪреМрдбрд╝рд╛рдИ, рдКрдВрдЪрд╛рдИ);
   if (argbBuf == null) рдЭреВрдареЗ рд╡рд╛рдкрд╕;
    
   applyClip (getClip ());
   applyAlpha ();
   drawImage (argbBuf, x, y, width, height, getTransform ());
   рд░рд┐рд╕реНрдЯреЛрд░рдХреНрд▓рд┐рдк ();
   рд╕рдЪ рд▓реМрдЯрдирд╛;
 } 

рдХреЛрдб рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдХреНрд▓рд┐рдкрд┐рдВрдЧ, рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ - рдФрд░ рдЗрд╕реЗ рд╕рднреА InDesign рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдмрд┐рдЯреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИ:

  рдирд┐рдЬреА int [] getBuf (рдЫрд╡рд┐ img, int рдЪреМрдбрд╝рд╛рдИ, int рдКрдВрдЪрд╛рдИ) {
   int [] argbBuf = рдирдпрд╛ int [рдЪреМрдбрд╝рд╛рдИ * рдКрдВрдЪрд╛рдИ];
   PixelGrabber pg = new PixelGrabber (img, 0, 0, рдЪреМрдбрд╝рд╛рдИ, рдКрдВрдЪрд╛рдИ, argbBuf, 0, рдЪреМрдбрд╝рд╛рдИ);
   рдХреЛрд╢рд┐рд╢ рдХрд░реЛ {
     if (pg.grabPixels ()) null рд╡рд╛рдкрд╕реА;
   }
   рдкрдХрдбрд╝ (рд╡реНрдпрд╡рдзрд╛рдирдмреЛрдзрдХ e) {рд╡рд╛рдкрд╕реА рдЕрд╢рдХреНрдд;  }
   рдЕрдЧрд░ ((pg.getStatus () & ImageObserver.ABORT)! = 0) рдЕрд╢рдХреНрдд рд▓реМрдЯреЗрдВ;
   рд╡рд╛рдкрд╕реА argbBuf;
 } 

рд▓реЗрдХрд┐рди InDesign рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

  рдирд┐рдЬреА рд╢реВрдиреНрдп рдбреНрд░рд╛рдЗрдореЗрдЬ (int [] argbBuf, int x, int y, int рдЪреМрдбрд╝рд╛рдИ, int рдКрдВрдЪрд╛рдИ, AffineTransform рдкрд░рд┐рд╡рд░реНрддрди) {
   рдбрдмрд▓ [] рдЯреНрд░рд╛рдВрд╕рдореИрдЯрд░ = рдирдпрд╛ рдбрдмрд▓ [6];
   transform.getMatrix (transMatr);
   this.image (argbBuf, x, y, width, height, transMatr);
 } 

рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ InDesign рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдкрдиреЗ рдЖрдк рд╣реА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╣рдореЗрд╢рд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдЖрдХреГрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди, рдореЗрд░реЗ рдмрдбрд╝реЗ рдЕрдлрд╕реЛрд╕ рдХреЗ рд╕рд╛рде, рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдЦреАрдВрдЪрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдгрдп рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ред
рдФрд░ рдЕрдм C ++ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдкреНрд▓рдЧрдЗрди рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдВрд╢ рджреВрдВрдЧрд╛, рддреБрдЪреНрдЫрддрд╛ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЛ рд╣рдЯрд╛ рджреВрдВрдЧрд╛ред
рд╢реБрд░реБрдЖрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ:

  JNIEXPORT рд╢реВрдиреНрдп JNICALL Java _..._ рдЫрд╡рд┐
   (рдЬреЗрдПрдирдПрдирд╡реАрд╡реА * рдПрдирд╡реА, рдЬреЙрдмрдЬреЗрдХреНрдЯ рдУрдмреНрдЬ, 
   jintArray imageARGBBuff, jint x, jint y, jint рдЪреМрдбрд╝рд╛рдИ, jint рдКрдВрдЪрд╛рдИ,
   jdoubleArray рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдореИрдЯреНрд░рд┐рдХреНрд╕) {

   K2 :: scoped_array <uint8> maskBuffer (рдирдпрд╛ uint8 [imageARGBBuff.length]);
   K2 :: scoped_array <uint8> pictBuffer (рдирдпрд╛ uint8 [3 * imageARGBBuff.length]);

// рд╣рдорд╛рд░реЗ ARGB рдореЗрдВ рдмрдлрд╝рд░реНрд╕ рднрд░реЗрдВ

рд▓реЗрдХрд┐рди рдлрд┐рд░ рдПрдХ рдирд░реНрддрдХреА рдХреЗ рд╕рд╛рде рдиреГрддреНрдп рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдмрд╛рдд рд╣реИ: рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреНрд▓реЗрдВрдбрд┐рдВрдЧ рд╕реНрдкреЗрд╕ = RGB рд╣реИ, рддреЛ Design CMYK рдореЗрдВ рдПрдХ рдЪрд┐рддреНрд░ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдпрд╣ рд╕рдордп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрд┐рд░рддрд╛ рд╣реИ, рдирд╛рдпрдХ рдкрд░ рдПрдХ рднрдпрд╛рдирдХ рдЖрдзреНрдпрд╛рддреНрдорд┐рдХ рдШрд╛рд╡ рдХреЛ рднрдбрд╝рдХрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдирд╛рдпрдХ рднреА рдирд╣реАрдВ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдпрджрд┐ рд╕рдореНрдорд┐рд╢реНрд░рдг рд░рдВрдЧ рд╕реНрдерд╛рди = CMYK рд╣реИ, рддреЛ рдЪрд┐рддреНрд░ RGB рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рд╕рдм рдЗрд╕ рддрд░рд╣ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ - рдореБрдЭреЗ рд╕рдордЭрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдм рд╣рдордиреЗ рдХреМрди рд╕рд╛ рд░рдВрдЧ рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

  рдпреВрдЯрд┐рд▓реНрд╕ <IXPUtils> xpUtils;
 InterfacePtr <IXPManager> xpManager (xpUtils-> QueryXPManager (db));
 InterfacePtr <IDocument> doc (db, db-> GetRootUID (), UseDefaultIID ());
 AGMColorSpace * рдмреНрд▓реЗрдВрдбрд┐рдВрдЧрд╕реНрдкреЗрд╕ = xpManager-> GetDocumentBlendingSpace ();

рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ:

  uint8 * outBuff = nil;
 int16 compCnt = 3, space = kRGBColorSpace;

 рдЕрдЧрд░ (IsBeingFlattened (env, obj)) {
   TransformRGB2CMYKifNeeded (doc, blendingSpace, pictBuffer.get (), & outBuff, imageARGBBuff.length);
   compCnt = 4;  space = kCMYKColorSpace;
   pictBuffer.reset (outBuff);
 } 

рдЕрдм рд╣рдо рдПрдХ рдЪрд┐рддреНрд░ рдФрд░ рдПрдХ рдЕрд▓реНрдлрд╛ рдорд╛рд╕реНрдХ рджреЛрдиреЛрдВ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ:

  AGMImageRecord imgR;
 рдореЗрдорд╕реЗрдЯ (& imgR, 0, sizeof (AGMImageRecord));

 imgR.bounds.xMin = x;
 imgR.bounds.yMin = y;
 imgR.bounds.xMax = x + рдЪреМрдбрд╝рд╛рдИ;
 imgR.bounds.yMax = y + height;
 imgR.byteWidth = compCnt * рдЪреМрдбрд╝рд╛рдИ;
 imgR.colorSpace = space;
 imgR.bitsPerPixel = compCnt * 8;
 imgR.baseAddr = (void *) pictBuffer.get ();

 AGMImageRecord maskR;
 рдореЗрдорд╕реЗрдЯ (& maskR, 0, sizeof (AGMImageRecord));
 maskR.bounds.xMin = x;
 maskR.bounds.yMin = y;
 maskR.bounds.xMax = x + рдЪреМрдбрд╝рд╛рдИ;
 maskR.bounds.yMax = y + height;
 maskR.byteWidth = рдЪреМрдбрд╝рд╛рдИ;
 maskR.colorSpace = kGrayColorSpace;
 maskR.bitsPerPixel = 8;
 maskR.baseAddr = (void *) maskBuffer.get ();

рдпрд╣ рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ рдкреНрд░рд╛рд░реВрдк рд╕реЗ InDesign рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:

  рдкреАрдПрдордореИрдЯреНрд░рд┐рдХреНрд╕ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо (nativeTransformData [0], nativeTransformData [1])
 nativeTransformData [2],
    	 nativeTransformData [3], 
 nativeTransformData [4], 
 nativeTransformData [5]); 

рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ - рдЖрдкрдХреЛ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдорд╛рд╕реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рдЬреНрдЮрд╛рди рд╕реЗ рдЕрд╡рдЧрдд рдХрд░рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  AGMPaint * AlphaServer = xpUt-> CreateImagePaintServer (& maskR, & transform, 0, nil);
 PMRect рд╕реАрдорд╛ (x, y, рдЪреМрдбрд╝рд╛рдИ + x, рдКрдВрдЪрд╛рдИ + y); 


  port-> рд╕реЗрдЯрдЕрд▓реНрдлрд╛рд╕реЗрд╡рд░ (рдЕрд▓реНрдлрд╛рд╕реЗрд╡рд░, рдХреЗрдЯреНрд░реНрдпреВ, рд╕реНрдЯрдм); 


  port-> starttransparencygroup (рд╕реАрдорд╛, рд╕рдореНрдорд┐рд╢реНрд░рдг, kFalse, kFalse); 

рдФрд░ рдЖрдк рдЖрдЦрд┐рд░ рдореЗрдВ рдПрдХ рддрд╕реНрд╡реАрд░ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдордиреЗ рдХрд░ рджрд┐рдЦрд╛рдпрд╛!

  port-> рдЫрд╡рд┐ (& imgR, рдмрджрд▓рдирд╛, drawFlags); 

рдореИрдВ рдЕрд▓реНрдлрд╛ рд╕рд░реНрд╡рд░ рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреА рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреБрдЪреНрдЫ рд╣реИред

рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ, рдпрд╛ рд╣рдо рдкрд░рд╛рдЬрд┐рдд рд░рд╛рдХреНрд╖рд╕ рдХреЗ рдЦрдЬрд╛рдиреЗ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ
рдЫрд╡рд┐ рддреЛ рдЗрд╕ рддрд░рд╣, рддреАрди-рд╕рд┐рд░ рд╡рд╛рд▓реЗ рд╕рд╛рдВрдк рдХреЛ рд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рд╕рд╛рдереА рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рдерд╛, рдФрд░ рд▓реЗрдЦрдХ - рдПрдбреЛрдм рдЗрдирдбрд┐рдЬрд╝рд╛рдЗрди рдПрд╕рдбреАрдХреЗ рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рджрд╕реНрддрд╛рд╡реЗрдЬ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЗрдЬрд╣реЛрдЧ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдереЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рди рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рд╕рдВрддреЛрд╖рдЬрдирдХ рдерд╛ред
рдпрд╣ рдХрд╣рд╛рдиреА рдХрд╛ рдЕрдВрдд рд╣реИ, рдФрд░ рдЬрд┐рд╕рдиреЗ рднреА рд╕реБрдирд╛ рд╡рд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!

Source: https://habr.com/ru/post/In127574/


All Articles