Branch: Tag:

1999-08-12

1999-08-12 14:01:33 by Mirar (Pontus Hagland) <pike@sort.mirar.org>

moved MMX back to layers_oper

Rev: src/modules/Image/layer_oper.h:1.6
Rev: src/modules/Image/layers.c:1.36

2158:    </arguments>   </method><method name='load_layer'>    <returntype> -  <object>Image.Layer</object></returntype> +  <object resolved='predef::Image.Layer'>Image.Layer</object></returntype>    <arguments>    </arguments>   </method><method name='load_layer'>    <returntype> -  <object>Image.Layer</object></returntype> +  <object resolved='predef::Image.Layer'>Image.Layer</object></returntype>    <arguments><argument name='file'><type><object resolved='predef::Image.load'/></type></argument>       </arguments>   </method><method name='load_layer'>    <returntype> -  <object>Image.Layer</object></returntype> +  <object resolved='predef::Image.Layer'>Image.Layer</object></returntype>    <arguments><argument name='filename'><type><string/></type></argument>       </arguments>
2204:      </doc>   </docgroup> + <docgroup homogen-name='lay' homogen-type='method'> + <method name='lay'> +  <returntype> +  <object resolved='predef::Image.Layer'>Image.Layer </object></returntype> +  <arguments><argument><value>array(Image.Layer|mapping)</value></argument> +  </arguments> + </method><method name='lay'> +  <returntype> +  <object resolved='predef::Image.Layer'>Image.Layer </object></returntype> +  <arguments><argument><value>array(Image.Layer|mapping)</value></argument><argument name='xoffset'><type><int/></type></argument> + <argument name='yoffset'><type><int/></type></argument> + <argument name='xsize'><type><int/></type></argument> + <argument name='ysize'><type><int/></type></argument> +  +  </arguments> + </method><doc> + <text> + <p>Combine layers.</p> + </text> + <group><returns/><text> + <p>a new layer object.</p> + </text></group> + <group><seealso/><text> + <p><ref resolved='predef::Image.Layer'>Image.Layer</ref></p></text></group> +  + </doc> + </docgroup>   <module name='ANY'>   <doc>   <text>
5425:   <p>It isn't possible to do a modulo 256 either. (why?)</p>   </text></group>   <group><seealso/><text> - <p><ref resolved='predef::Image.Image.`-'>`-</ref>, <ref resolved='predef::Image.Image.`+'>`+</ref>, <ref resolved='predef::Image.Image.`|'>`|</ref>, <ref resolved='predef::Image.Image.`&amp;'>`&amp;amp;</ref>, <ref resolved='predef::Image.Image.`*'>`*</ref>, <ref>Image.Layer</ref></p></text></group> + <p><ref resolved='predef::Image.Image.`-'>`-</ref>, <ref resolved='predef::Image.Image.`+'>`+</ref>, <ref resolved='predef::Image.Image.`|'>`|</ref>, <ref resolved='predef::Image.Image.`&amp;'>`&amp;amp;</ref>, <ref resolved='predef::Image.Image.`*'>`*</ref>, <ref resolved='predef::Image.Layer'>Image.Layer</ref></p></text></group>      </doc>   </docgroup>
5469:   <p>the new image object</p>   </text></group>   <group><seealso/><text> - <p><ref resolved='predef::Image.Image.`-'>`-</ref>, <ref resolved='predef::Image.Image.`+'>`+</ref>, <ref resolved='predef::Image.Image.`|'>`|</ref>, <ref resolved='predef::Image.Image.`*'>`*</ref>, <ref>Image.Layer</ref></p></text></group> + <p><ref resolved='predef::Image.Image.`-'>`-</ref>, <ref resolved='predef::Image.Image.`+'>`+</ref>, <ref resolved='predef::Image.Image.`|'>`|</ref>, <ref resolved='predef::Image.Image.`*'>`*</ref>, <ref resolved='predef::Image.Layer'>Image.Layer</ref></p></text></group>      </doc>   </docgroup>
5518:   <p>the new image object</p>   </text></group>   <group><seealso/><text> - <p><ref resolved='predef::Image.Image.`-'>`-</ref>, <ref resolved='predef::Image.Image.`+'>`+</ref>, <ref resolved='predef::Image.Image.`|'>`|</ref>, <ref resolved='predef::Image.Image.`&amp;'>`&amp;amp;</ref>, <ref>Image.Layer</ref></p></text></group> + <p><ref resolved='predef::Image.Image.`-'>`-</ref>, <ref resolved='predef::Image.Image.`+'>`+</ref>, <ref resolved='predef::Image.Image.`|'>`|</ref>, <ref resolved='predef::Image.Image.`&amp;'>`&amp;amp;</ref>, <ref resolved='predef::Image.Layer'>Image.Layer</ref></p></text></group>      </doc>   </docgroup>
5560:   <p>the new image object</p>   </text></group>   <group><seealso/><text> - <p><ref resolved='predef::Image.Image.`-'>`-</ref>, <ref resolved='predef::Image.Image.`|'>`|</ref>, <ref resolved='predef::Image.Image.`&amp;'>`&amp;amp;</ref>, <ref resolved='predef::Image.Image.`*'>`*</ref>, <ref>Image.Layer</ref></p></text></group> + <p><ref resolved='predef::Image.Image.`-'>`-</ref>, <ref resolved='predef::Image.Image.`|'>`|</ref>, <ref resolved='predef::Image.Image.`&amp;'>`&amp;amp;</ref>, <ref resolved='predef::Image.Image.`*'>`*</ref>, <ref resolved='predef::Image.Layer'>Image.Layer</ref></p></text></group>      </doc>   </docgroup>
5603:   <p>the new image object</p>   </text></group>   <group><seealso/><text> - <p><ref resolved='predef::Image.Image.`+'>`+</ref>, <ref resolved='predef::Image.Image.`|'>`|</ref>, <ref resolved='predef::Image.Image.`&amp;'>`&amp;amp;</ref>, <ref resolved='predef::Image.Image.`*'>`*</ref>, <ref>Image.Layer</ref>, <ref resolved='predef::Image.Image.min'>min</ref>, <ref resolved='predef::Image.Image.max'>max</ref>, <ref resolved='predef::Image.Image.`=='>`==</ref></p></text></group> + <p><ref resolved='predef::Image.Image.`+'>`+</ref>, <ref resolved='predef::Image.Image.`|'>`|</ref>, <ref resolved='predef::Image.Image.`&amp;'>`&amp;amp;</ref>, <ref resolved='predef::Image.Image.`*'>`*</ref>, <ref resolved='predef::Image.Layer'>Image.Layer</ref>, <ref resolved='predef::Image.Image.min'>min</ref>, <ref resolved='predef::Image.Image.max'>max</ref>, <ref resolved='predef::Image.Image.`=='>`==</ref></p></text></group>      </doc>   </docgroup>
5747:   <p>the new image object</p>   </text></group>   <group><seealso/><text> - <p><ref resolved='predef::Image.Image.`-'>`-</ref>, <ref resolved='predef::Image.Image.`+'>`+</ref>, <ref resolved='predef::Image.Image.`&amp;'>`&amp;amp;</ref>, <ref resolved='predef::Image.Image.`*'>`*</ref>, <ref>Image.Layer</ref></p></text></group> + <p><ref resolved='predef::Image.Image.`-'>`-</ref>, <ref resolved='predef::Image.Image.`+'>`+</ref>, <ref resolved='predef::Image.Image.`&amp;'>`&amp;amp;</ref>, <ref resolved='predef::Image.Image.`*'>`*</ref>, <ref resolved='predef::Image.Layer'>Image.Layer</ref></p></text></group>      </doc>   </docgroup>
9040:   </doc>   </docgroup>   </module> + <class name='Layer'> + <doc> + <text> + <p/> +  + <p> + <add_appendix name='layers' title='image.layer modes'> + <dl compact='compact'> + <dt><i>The variables in the expression:</i> + </dt><dt>L</dt><dd><i>The active layer</i> + </dd><dt>S</dt><dd><i>The source layer (the sum of the layers below)</i> + </dd><dt>D</dt><dd><i>The destintion layer (the result)</i> + </dd><dt>Xrgb</dt><dd><i>Layer red (<b>Xr</b>), green (<b>Xg</b>) or blue channel (<b>Xb</b>) </i> + </dd><dt>Xhsv</dt><dd><i>Layer hue (<b>Xh</b>), saturation (<b>Xs</b>) or value channel (<b>Xv</b>) (virtual channels)</i> + </dd><dt>aX</dt><dd><i>Layer alpha, channel in layer alpha</i> + </dd></dl> + <i>All channels are calculated separately, if nothing else is specified.</i> + <table><tr><td align='right' valign='center'><b>top layer</b></td><td align='right'><image file='predef.Image.Layer.1.png' height='80' width='560'>layers.c.0.png</image></td><td align='left' valign='center'/></tr><tr><td align='right' valign='center'><b>bottom layer</b></td><td align='right'><image file='predef.Image.Layer.2.png' height='80' width='560'>layers.c.1.png</image></td><td align='left' valign='center'/></tr></table><table><tr><td> </td></tr><tr><td align='right' valign='center'><b>normal</b></td><td align='right'><image file='predef.Image.Layer.3.png' height='80' width='560'>layers.c.2.png</image></td><td align='left' valign='center'>D=L applied with alpha: D=(L*aL+S*(1-aL)*aS) / (aL+(1-aL)*aS), aD=(aL+(1-aL)*aS)</td></tr><tr><td> </td></tr><tr><td align='right' valign='center'><b>add</b></td><td align='right'><image file='predef.Image.Layer.4.png' height='80' width='560'>layers.c.3.png</image></td><td align='left' valign='center'>D=L+S applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>subtract</b></td><td align='right'><image file='predef.Image.Layer.5.png' height='80' width='560'>layers.c.4.png</image></td><td align='left' valign='center'>D=S-L applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>multiply</b></td><td align='right'><image file='predef.Image.Layer.6.png' height='80' width='560'>layers.c.5.png</image></td><td align='left' valign='center'>D=S*L applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>divide</b></td><td align='right'><image file='predef.Image.Layer.7.png' height='80' width='560'>layers.c.6.png</image></td><td align='left' valign='center'>D=S/L applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>negdivide</b></td><td align='right'><image file='predef.Image.Layer.8.png' height='80' width='560'>layers.c.7.png</image></td><td align='left' valign='center'>D=1.0-S/L applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>modulo</b></td><td align='right'><image file='predef.Image.Layer.9.png' height='80' width='560'>layers.c.8.png</image></td><td align='left' valign='center'>D=S%L applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>invsubtract</b></td><td align='right'><image file='predef.Image.Layer.10.png' height='80' width='560'>layers.c.9.png</image></td><td align='left' valign='center'>D=L-S applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>invdivide</b></td><td align='right'><image file='predef.Image.Layer.11.png' height='80' width='560'>layers.c.10.png</image></td><td align='left' valign='center'>D=L/S applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>invmodulo</b></td><td align='right'><image file='predef.Image.Layer.12.png' height='80' width='560'>layers.c.11.png</image></td><td align='left' valign='center'>D=L%S applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>imultiply</b></td><td align='right'><image file='predef.Image.Layer.13.png' height='80' width='560'>layers.c.12.png</image></td><td align='left' valign='center'>D=(1-L)*S applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>idivide</b></td><td align='right'><image file='predef.Image.Layer.14.png' height='80' width='560'>layers.c.13.png</image></td><td align='left' valign='center'>D=S/(1-L) applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>invidivide</b></td><td align='right'><image file='predef.Image.Layer.15.png' height='80' width='560'>layers.c.14.png</image></td><td align='left' valign='center'>D=L/(1-S) applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>difference</b></td><td align='right'><image file='predef.Image.Layer.16.png' height='80' width='560'>layers.c.15.png</image></td><td align='left' valign='center'>D=abs(L-S) applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>max</b></td><td align='right'><image file='predef.Image.Layer.17.png' height='80' width='560'>layers.c.16.png</image></td><td align='left' valign='center'>D=max(L,S) applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>min</b></td><td align='right'><image file='predef.Image.Layer.18.png' height='80' width='560'>layers.c.17.png</image></td><td align='left' valign='center'>D=min(L,S) applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>bitwise_and</b></td><td align='right'><image file='predef.Image.Layer.19.png' height='80' width='560'>layers.c.18.png</image></td><td align='left' valign='center'>D=L&amp;amp;S applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>bitwise_or</b></td><td align='right'><image file='predef.Image.Layer.20.png' height='80' width='560'>layers.c.19.png</image></td><td align='left' valign='center'>D=L|S applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>bitwise_xor</b></td><td align='right'><image file='predef.Image.Layer.21.png' height='80' width='560'>layers.c.20.png</image></td><td align='left' valign='center'>D=L^S applied with alpha, aD=aS</td></tr><tr><td> </td></tr><tr><td align='right' valign='center'><b>replace</b></td><td align='right'><image file='predef.Image.Layer.22.png' height='80' width='560'>layers.c.21.png</image></td><td align='left' valign='center'>D=(L*aL+S*(1-aL)*aS) / (aL+(1-aL)*aS), aD=aS</td></tr><tr><td align='right' valign='center'><b>red</b></td><td align='right'><image file='predef.Image.Layer.23.png' height='80' width='560'>layers.c.22.png</image></td><td align='left' valign='center'>Dr=(Lr*aLr+Sr*(1-aLr)*aSr) / (aLr+(1-aLr)*aSr), Dgb=Sgb, aD=aS</td></tr><tr><td align='right' valign='center'><b>green</b></td><td align='right'><image file='predef.Image.Layer.24.png' height='80' width='560'>layers.c.23.png</image></td><td align='left' valign='center'>Dg=(Lg*aLg+Sg*(1-aLg)*aSg) / (aLg+(1-aLg)*aSg), Drb=Srb, aD=aS</td></tr><tr><td align='right' valign='center'><b>blue</b></td><td align='right'><image file='predef.Image.Layer.25.png' height='80' width='560'>layers.c.24.png</image></td><td align='left' valign='center'>Db=(Lb*aLb+Sb*(1-aLb)*aSb) / (aLb+(1-aLb)*aSb), Drg=Srg, aD=aS</td></tr><tr><td align='right' valign='center'><b>hardlight</b></td><td align='right'><image file='predef.Image.Layer.26.png' height='80' width='560'>layers.c.25.png</image></td><td align='left' valign='center'>Like photoshop hardlight layer mode, aD=aS</td></tr><tr><td> </td></tr><tr><td align='right' valign='center'><b>replace_hsv</b></td><td align='right'><image file='predef.Image.Layer.27.png' height='80' width='560'>layers.c.26.png</image></td><td align='left' valign='center'>Dhsv=Lhsv apply with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>hue</b></td><td align='right'><image file='predef.Image.Layer.28.png' height='80' width='560'>layers.c.27.png</image></td><td align='left' valign='center'>Dh=Lh apply with alpha, Dsv=Lsv, aD=aS</td></tr><tr><td align='right' valign='center'><b>saturation</b></td><td align='right'><image file='predef.Image.Layer.29.png' height='80' width='560'>layers.c.28.png</image></td><td align='left' valign='center'>Ds=Ls apply with alpha, Dhv=Lhv, aD=aS</td></tr><tr><td align='right' valign='center'><b>value</b></td><td align='right'><image file='predef.Image.Layer.30.png' height='80' width='560'>layers.c.29.png</image></td><td align='left' valign='center'>Dv=Lv apply with alpha, Dhs=Lhs, aD=aS</td></tr><tr><td align='right' valign='center'><b>color</b></td><td align='right'><image file='predef.Image.Layer.31.png' height='80' width='560'>layers.c.30.png</image></td><td align='left' valign='center'>Dhs=Lhs apply with alpha, Dv=Lv, aD=aS</td></tr><tr><td align='right' valign='center'><b>value_mul</b></td><td align='right'><image file='predef.Image.Layer.32.png' height='80' width='560'>layers.c.31.png</image></td><td align='left' valign='center'>Dv=Lv*Sv apply with alpha, Dhs=Lhs, aD=aS</td></tr><tr><td> </td></tr><tr><td align='right' valign='center'><b>darken</b></td><td align='right'><image file='predef.Image.Layer.33.png' height='80' width='560'>layers.c.32.png</image></td><td align='left' valign='center'>Dv=min(Lv,Sv) apply with alpha, Dhs=Lhs, aD=aS</td></tr><tr><td align='right' valign='center'><b>lighten</b></td><td align='right'><image file='predef.Image.Layer.34.png' height='80' width='560'>layers.c.33.png</image></td><td align='left' valign='center'>Dv=max(Lv,Sv) apply with alpha, Dhs=Lhs, aD=aS</td></tr><tr><td align='right' valign='center'><b>saturate</b></td><td align='right'><image file='predef.Image.Layer.35.png' height='80' width='560'>layers.c.34.png</image></td><td align='left' valign='center'>Ds=max(Ls,Ss) apply with alpha, Dhv=Lhv, aD=aS</td></tr><tr><td align='right' valign='center'><b>desaturate</b></td><td align='right'><image file='predef.Image.Layer.36.png' height='80' width='560'>layers.c.35.png</image></td><td align='left' valign='center'>Ds=min(Ls,Ss) apply with alpha, Dhv=Lhv, aD=aS</td></tr><tr><td align='right' valign='center'><b>hls_replace</b></td><td align='right'><image file='predef.Image.Layer.37.png' height='80' width='560'>layers.c.36.png</image></td><td align='left' valign='center'>Dhls=Lhls apply with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>hls_hue</b></td><td align='right'><image file='predef.Image.Layer.38.png' height='80' width='560'>layers.c.37.png</image></td><td align='left' valign='center'>Dh=Lh apply with alpha, Dsv=Lsv, aD=aS</td></tr><tr><td align='right' valign='center'><b>hls_saturation</b></td><td align='right'><image file='predef.Image.Layer.39.png' height='80' width='560'>layers.c.38.png</image></td><td align='left' valign='center'>Ds=Ls apply with alpha, Dhv=Lhv, aD=aS</td></tr><tr><td align='right' valign='center'><b>hls_lightness</b></td><td align='right'><image file='predef.Image.Layer.40.png' height='80' width='560'>layers.c.39.png</image></td><td align='left' valign='center'>Dl=Ll apply with alpha, Dhs=Lhs, aD=aS</td></tr><tr><td align='right' valign='center'><b>hls_color</b></td><td align='right'><image file='predef.Image.Layer.41.png' height='80' width='560'>layers.c.40.png</image></td><td align='left' valign='center'>Dhs=Lhs apply with alpha, Dl=Ll, aD=aS</td></tr><tr><td align='right' valign='center'><b>hls_lightness_mul</b></td><td align='right'><image file='predef.Image.Layer.42.png' height='80' width='560'>layers.c.41.png</image></td><td align='left' valign='center'>Dl=Ll*Sl apply with alpha, Dhs=Lhs, aD=aS</td></tr><tr><td align='right' valign='center'><b>hls_darken</b></td><td align='right'><image file='predef.Image.Layer.43.png' height='80' width='560'>layers.c.42.png</image></td><td align='left' valign='center'>Dl=min(Ll,Sl) apply with alpha, Dhs=Lhs, aD=aS</td></tr><tr><td align='right' valign='center'><b>hls_lighten</b></td><td align='right'><image file='predef.Image.Layer.44.png' height='80' width='560'>layers.c.43.png</image></td><td align='left' valign='center'>Dl=max(Ll,Sl) apply with alpha, Dhs=Lhs, aD=aS</td></tr><tr><td align='right' valign='center'><b>hls_saturate</b></td><td align='right'><image file='predef.Image.Layer.45.png' height='80' width='560'>layers.c.44.png</image></td><td align='left' valign='center'>Ds=max(Ls,Ss) apply with alpha, Dhl=Lhl, aD=aS</td></tr><tr><td align='right' valign='center'><b>hls_desaturate</b></td><td align='right'><image file='predef.Image.Layer.46.png' height='80' width='560'>layers.c.45.png</image></td><td align='left' valign='center'>Ds=min(Ls,Ss) apply with alpha, Dhl=Lhl, aD=aS</td></tr><tr><td> </td></tr><tr><td align='right' valign='center'><b>dissolve</b></td><td align='right'><image file='predef.Image.Layer.47.png' height='80' width='560'>layers.c.46.png</image></td><td align='left' valign='center'>i=random 0 or 1, D=i?L:S, aD=i+aS</td></tr><tr><td align='right' valign='center'><b>behind</b></td><td align='right'><image file='predef.Image.Layer.48.png' height='80' width='560'>layers.c.47.png</image></td><td align='left' valign='center'>D=(S*aS+L*(1-aS)*aL) / (aS+(1-aS)*aL), aD=(aS+(1-aS)*aL); simply swap S and L</td></tr><tr><td align='right' valign='center'><b>erase</b></td><td align='right'><image file='predef.Image.Layer.49.png' height='80' width='560'>layers.c.48.png</image></td><td align='left' valign='center'>D=S, aD=aS*(1-aL)</td></tr><tr><td> </td></tr><tr><td align='right' valign='center'><b>screen</b></td><td align='right'><image file='predef.Image.Layer.50.png' height='80' width='560'>layers.c.49.png</image></td><td align='left' valign='center'>1-(1-S)*(1-L) applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>overlay</b></td><td align='right'><image file='predef.Image.Layer.51.png' height='80' width='560'>layers.c.50.png</image></td><td align='left' valign='center'>(1-(1-a)*(1-b)-a*b)*a+a*b applied with alpha, aD=aS</td></tr><tr><td align='right' valign='center'><b>burn_alpha</b></td><td align='right'><image file='predef.Image.Layer.52.png' height='80' width='560'>layers.c.51.png</image></td><td align='left' valign='center'>aD=aL+aS applied with alpha, D=L+S; experimental, may change or be removed</td></tr><tr><td> </td></tr><tr><td align='right' valign='center'><b>equal</b></td><td align='right'><image file='predef.Image.Layer.53.png' height='80' width='560'>layers.c.52.png</image></td><td align='left' valign='center'>each channel D=max if L==S, 0 otherwise, apply with alpha</td></tr><tr><td align='right' valign='center'><b>not_equal</b></td><td align='right'><image file='predef.Image.Layer.54.png' height='80' width='560'>layers.c.53.png</image></td><td align='left' valign='center'>each channel D=max if L!=S, 0 otherwise, apply with alpha</td></tr><tr><td align='right' valign='center'><b>less</b></td><td align='right'><image file='predef.Image.Layer.55.png' height='80' width='560'>layers.c.54.png</image></td><td align='left' valign='center'>each channel D=max if L&lt;S, 0 otherwise, apply with alpha</td></tr><tr><td align='right' valign='center'><b>more</b></td><td align='right'><image file='predef.Image.Layer.56.png' height='80' width='560'>layers.c.55.png</image></td><td align='left' valign='center'>each channel D=max if L&gt;S, 0 otherwise, apply with alpha</td></tr><tr><td align='right' valign='center'><b>less_or_equal</b></td><td align='right'><image file='predef.Image.Layer.57.png' height='80' width='560'>layers.c.56.png</image></td><td align='left' valign='center'>each channel D=max if L&lt;=S, 0 otherwise, apply with alpha</td></tr><tr><td align='right' valign='center'><b>more_or_equal</b></td><td align='right'><image file='predef.Image.Layer.58.png' height='80' width='560'>layers.c.57.png</image></td><td align='left' valign='center'>each channel D=max if L&gt;=S, 0 otherwise, apply with alpha</td></tr><tr><td> </td></tr><tr><td align='right' valign='center'><b>logic_equal</b></td><td align='right'><image file='predef.Image.Layer.59.png' height='80' width='560'>layers.c.58.png</image></td><td align='left' valign='center'>logic: D=white and opaque if L==S, black and transparent otherwise</td></tr><tr><td align='right' valign='center'><b>logic_not_equal</b></td><td align='right'><image file='predef.Image.Layer.60.png' height='80' width='560'>layers.c.59.png</image></td><td align='left' valign='center'>logic: D=white and opaque if any L!=S, black and transparent otherwise</td></tr><tr><td align='right' valign='center'><b>logic_strict_less</b></td><td align='right'><image file='predef.Image.Layer.61.png' height='80' width='560'>layers.c.60.png</image></td><td align='left' valign='center'>logic: D=white and opaque if all L&lt;S, black and transparent otherwise</td></tr><tr><td align='right' valign='center'><b>logic_strict_more</b></td><td align='right'><image file='predef.Image.Layer.62.png' height='80' width='560'>layers.c.61.png</image></td><td align='left' valign='center'>logic: D=white and opaque if all L&gt;S, black and transparent otherwise</td></tr><tr><td align='right' valign='center'><b>logic_strict_less_equal</b></td><td align='right'><image file='predef.Image.Layer.63.png' height='80' width='560'>layers.c.62.png</image></td><td align='left' valign='center'>logic: D=white and opaque if all L&lt;=L, black and transparent otherwise</td></tr><tr><td align='right' valign='center'><b>logic_strict_more_equal</b></td><td align='right'><image file='predef.Image.Layer.64.png' height='80' width='560'>layers.c.63.png</image></td><td align='left' valign='center'>logic: D=white and opaque if all L&gt;=L, black and transparent otherwise</td></tr></table> + </add_appendix></p> + </text> + <group><seealso/><text> + <p><ref>layers</ref></p></text></group> +  + </doc> + <docgroup homogen-type='method'> + <method name='set_image'> +  <returntype> +  <object>object </object></returntype> +  <arguments><argument name='image'><type> +  <object resolved='predef::Image.Image'>Image.Image</object></type></argument> +  +  </arguments> + </method><method name='set_image'> +  <returntype> +  <object>object </object></returntype> +  <arguments><argument name='image'><type> +  <object resolved='predef::Image.Image'>Image.Image</object></type></argument> + <argument name='alpha_channel'><type> +  <object resolved='predef::Image.Image'>Image.Image</object></type></argument> +  +  </arguments> + </method><method name='image'> +  <returntype> +  <or><object resolved='predef::Image.Layer.set_image'/><int><min>0</min></int></or></returntype> +  <arguments> +  </arguments> + </method><method name='alpha'> +  <returntype> +  <or><object resolved='predef::Image.Layer.set_image'/><int><min>0</min></int></or></returntype> +  <arguments> +  </arguments> + </method><doc> + <text> + <p>Set/change/get image and alpha channel for the layer. + You could also cancel the channels giving 0 + instead of an image object.</p> + </text> + <group><note/><text> + <p>image and alpha channel must be of the same size, + or canceled.</p> + </text></group> +  + </doc> + </docgroup> + <docgroup homogen-type='method'> + <method name='set_alpha_value'> +  <returntype> +  <object>object </object></returntype> +  <arguments><argument name='value'><type><float/></type></argument> +  +  </arguments> + </method><method name='alpha_value'> +  <returntype> +  <object>double </object></returntype> +  <arguments> +  </arguments> + </method><doc> + <text> + <p>Set/get the general alpha value of this layer. + This is a float value between 0 and 1, + and is multiplied with the alpha channel.</p> + </text> +  + </doc> + </docgroup> + <docgroup homogen-type='method'> + <method name='autocrop'> +  <returntype> +  <object>object </object></returntype> +  <arguments> +  </arguments> + </method><method name='autocrop'> +  <returntype> +  <object>object </object></returntype> +  <arguments><argument name='left'><type> +  <int><min>0</min><max>1</max></int></type></argument> + <argument name='right'><type> +  <int><min>0</min><max>1</max></int></type></argument> + <argument name='top'><type> +  <int><min>0</min><max>1</max></int></type></argument> + <argument name='bottom'><type> +  <int><min>0</min><max>1</max></int></type></argument> +  +  </arguments> + </method><method name='find_autocrop'> +  <returntype> +  <array><valuetype><int/></valuetype></array></returntype> +  <arguments> +  </arguments> + </method><method name='find_autocrop'> +  <returntype> +  <array><valuetype><int/></valuetype></array></returntype> +  <arguments><argument name='left'><type> +  <int><min>0</min><max>1</max></int></type></argument> + <argument name='right'><type> +  <int><min>0</min><max>1</max></int></type></argument> + <argument name='top'><type> +  <int><min>0</min><max>1</max></int></type></argument> + <argument name='bottom'><type> +  <int><min>0</min><max>1</max></int></type></argument> +  +  </arguments> + </method><doc> + <text> + <p>This crops (of finds) a suitable crop, non-destructive crop. + The layer alpha channel is checked, and edges that is + transparent is removed.</p> +  + <p>(What really happens is that the image and alpha channel is checked, + and edges equal the fill setup is cropped away.)</p> +  + <p><ref resolved='predef::Image.Layer.find_autocrop'>find_autocrop</ref>() returns an array of xoff,yoff,xsize,ysize, + which can be fed to <ref resolved='predef::Image.Layer.crop'>crop</ref>(). + </p> + </text> + <group><note/><text> + <p>A tiled image will not be cropped at all.</p> +  + <p><tt>left</tt>...<tt>bottom</tt> arguments can be used + to tell what sides cropping are ok on. + </p> + </text></group> + <group><seealso/><text> + <p><ref resolved='predef::Image.Layer.crop'>crop</ref>, <ref resolved='predef::Image.Image.autocrop'>Image.Image-&gt;autocrop</ref></p></text></group> +  + </doc> + </docgroup> + <docgroup homogen-type='method'> + <method name='set_mode'> +  <returntype> +  <object>object </object></returntype> +  <arguments><argument name='mode'><type><string/></type></argument> +  +  </arguments> + </method><method name='mode'> +  <returntype> +  <object>string </object></returntype> +  <arguments> +  </arguments> + </method><method name='available_modes'> +  <returntype> +  <array><valuetype><string/></valuetype></array></returntype> +  <arguments> +  </arguments> + </method><doc> + <text> + <p>Set/get layer mode. Mode is one of these:</p> +  + <p>"normal", + "add", + "subtract", + "multiply", + "divide", + "modulo", + "invsubtract", + "invdivide", + "invmodulo", + "difference", + "max", + "min", + "bitwise_and", + "bitwise_or", + "bitwise_xor",</p> +  + <p>"replace", + "red", + "green", + "blue",</p> +  + <p>"replace_hsv", + "hue", + "saturation", + "value", + "color",</p> +  + <p>"darken", + "lighten",</p> +  + <p>"dissolve", + "behind", + "erase",</p> +  + <p><ref resolved='predef::Image.Layer.available_modes'>available_modes</ref>() simply gives an array + containing the names of these modes. + </p> + </text> + <group><note/><text> + <p>image and alpha channel must be of the same size, + or canceled.</p> + </text></group> +  + </doc> + </docgroup> + <docgroup homogen-name='create' homogen-type='method'> + <method name='create'> +  <returntype> +  <object>void </object></returntype> +  <arguments><argument name='image'><type><object resolved='predef::Image.Layer.create'/></type></argument> + <argument name='alpha'><type><object resolved='predef::Image.Layer.create'/></type></argument> + <argument name='mode'><type><string/></type></argument> +  +  </arguments> + </method><method name='create'> +  <returntype> +  <object>void </object></returntype> +  <arguments><argument name='info'><type><mapping/></type></argument> +  +  </arguments> + </method><method name='create'> +  <returntype> +  <object>void </object></returntype> +  <arguments> +  </arguments> + </method><method name='create'> +  <returntype> +  <object>void </object></returntype> +  <arguments><argument name='xsize'><type><int/></type></argument> + <argument name='ysize'><type><int/></type></argument> + <argument name='color'><type><object resolved='predef::Image.Layer.create'/></type></argument> +  +  </arguments> + </method><method name='create'> +  <returntype> +  <object>void </object></returntype> +  <arguments><argument name='color'><type><object resolved='predef::Image.Layer.create'/></type></argument> +  +  </arguments> + </method><doc> + <text> + <p>The Layer construct either three arguments, + the image object, alpha channel and mode, or + a mapping with optional elements: + <pre> + "image":image, +  // default: black +  + "alpha":alpha, +  // alpha channel object +  // default: full opaque +  + "mode":string mode, +  // layer mode, see &lt;ref&gt;mode&lt;/ref&gt;. +  // default: "normal" +  + "alpha_value":float(0.0-1.0), +  // layer general alpha value +  // default is 1.0; this is multiplied +  // with the alpha channel. +  + "xoffset":int, + "yoffset":int, +  // offset of this layer +  + "fill":Color, + "fill_alpha":Color, +  // fill color, ie what color is used +  // "outside" the image. default: black +  // and black (full transparency). +  + "tiled":int(0|1), +  // select tiling; if 1, the image +  // will be tiled. deafult: 0, off + </pre> + The layer can also be created "empty", + either giving a size and color - + this will give a filled opaque square, + or a color, which will set the "fill" + values and fill the whole layer with an + opaque color.</p> +  + <p>All values can be modified after object creation. + </p> + </text> + <group><note/><text> + <p>image and alpha channel must be of the same size. + </p> + </text></group> +  + </doc> + </docgroup> + <docgroup homogen-name='crop' homogen-type='method'> + <method name='crop'> +  <returntype> +  <object>object </object></returntype> +  <arguments><argument name='xoff'><type><int/></type></argument> + <argument name='yoff'><type><int/></type></argument> + <argument name='xsize'><type><int/></type></argument> + <argument name='ysize'><type><int/></type></argument> +  +  </arguments> + </method><doc> + <text> + <p>Crops this layer at this offset and size. + Offset is not relative the layer offset, so this + can be used to crop a number of layers simuntaneously.</p> +  + <p>The <ref resolved='predef::Image.Layer.fill'>fill</ref> values are used if the layer is + enlarged.</p> + </text> + <group><returns/><text> + <p>a new layer object</p> + </text></group> + <group><note/><text> + <p>The new layer object may have the same image object, + if there was no cropping to be done.</p> + </text></group> +  + </doc> + </docgroup> + <docgroup homogen-type='method'> + <method name='set_fill'> +  <returntype> +  <object>object </object></returntype> +  <arguments><argument name='color'><type> +  <object resolved='predef::Image.Color'>Color</object></type></argument> +  +  </arguments> + </method><method name='set_fill'> +  <returntype> +  <object>object </object></returntype> +  <arguments><argument name='color'><type> +  <object resolved='predef::Image.Color'>Color</object></type></argument> + <argument name='alpha'><type> +  <object resolved='predef::Image.Color'>Color</object></type></argument> +  +  </arguments> + </method><method name='fill'> +  <returntype> +  <object>object </object></returntype> +  <arguments> +  </arguments> + </method><method name='fill_alpha'> +  <returntype> +  <object>object </object></returntype> +  <arguments> +  </arguments> + </method><doc> + <text> + <p>Set/query fill color and alpha, ie the color used "outside" the + image. This is mostly useful if you want to "frame" + a layer.</p> + </text> +  + </doc> + </docgroup> + <docgroup homogen-type='method'> + <method name='set_offset'> +  <returntype> +  <object>object </object></returntype> +  <arguments><argument name='x'><type><int/></type></argument> + <argument name='y'><type><int/></type></argument> +  +  </arguments> + </method><method name='xoffset'> +  <returntype> +  <object>int </object></returntype> +  <arguments> +  </arguments> + </method><method name='yoffset'> +  <returntype> +  <object>int </object></returntype> +  <arguments> +  </arguments> + </method><doc> + <text> + <p>Set/query layer offset. + </p> + </text> +  + </doc> + </docgroup> + <docgroup homogen-type='method'> + <method name='set_tiled'> +  <returntype> +  <object>object </object></returntype> +  <arguments><argument name='yes'><type><int/></type></argument> +  +  </arguments> + </method><method name='tiled'> +  <returntype> +  <object>int </object></returntype> +  <arguments> +  </arguments> + </method><doc> + <text> + <p>Set/query <i>tiled</i> flag. If set, the + image and alpha channel will be tiled rather + then framed by the <ref resolved='predef::Image.Layer.fill'>fill</ref> values.</p> + </text> +  + </doc> + </docgroup> + <docgroup homogen-type='method'> + <method name='xsize'> +  <returntype> +  <object>int </object></returntype> +  <arguments> +  </arguments> + </method><method name='ysize'> +  <returntype> +  <object>int </object></returntype> +  <arguments> +  </arguments> + </method><doc> + <text> + <p>Query layer offset. This is the same as layer + image/alpha image size.</p> + </text> +  + </doc> + </docgroup> + </class>   <module name='PCX'>   <docgroup homogen-name='_decode' homogen-type='method'>   <method name='_decode'>