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