GD.3pm
上传用户:qdrechuli
上传日期:2022-08-01
资源大小:917k
文件大小:40k
源码类别:

视频捕捉/采集

开发平台:

Visual C++

  1. ." Automatically generated by Pod::Man version 1.15
  2. ." Tue Oct  8 11:46:50 2002
  3. ."
  4. ." Standard preamble:
  5. ." ======================================================================
  6. .de Sh " Subsection heading
  7. .br
  8. .if t .Sp
  9. .ne 5
  10. .PP
  11. fB\$1fR
  12. .PP
  13. ..
  14. .de Sp " Vertical space (when we can't use .PP)
  15. .if t .sp .5v
  16. .if n .sp
  17. ..
  18. .de Ip " List item
  19. .br
  20. .ie \n(.$>=3 .ne \$3
  21. .el .ne 3
  22. .IP "\$1" \$2
  23. ..
  24. .de Vb " Begin verbatim text
  25. .ft CW
  26. .nf
  27. .ne \$1
  28. ..
  29. .de Ve " End verbatim text
  30. .ft R
  31. .fi
  32. ..
  33. ." Set up some character translations and predefined strings.  *(-- will
  34. ." give an unbreakable dash, *(PI will give pi, *(L" will give a left
  35. ." double quote, and *(R" will give a right double quote.  | will give a
  36. ." real vertical bar.  *(C+ will give a nicer C++.  Capital omega is used
  37. ." to do unbreakable dashes and therefore won't be available.  *(C` and
  38. ." *(C' expand to `' in nroff, nothing in troff, for use with C<>
  39. .tr (*W-|(bv*(Tr
  40. .ds C+ Cv'-.1v'h'-1p's-2+h'-1p'+s0v'.1v'h'-1p'
  41. .ie n {
  42. .    ds -- (*W-
  43. .    ds PI pi
  44. .    if (n(.H=4u)&(1m=24u) .ds -- (*Wh'-12u'(*Wh'-12u'-" diablo 10 pitch
  45. .    if (n(.H=4u)&(1m=20u) .ds -- (*Wh'-12u'(*Wh'-8u'-"  diablo 12 pitch
  46. .    ds L" ""
  47. .    ds R" ""
  48. .    ds C` ""
  49. .    ds C' ""
  50. 'br}
  51. .el{
  52. .    ds -- |(em|
  53. .    ds PI (*p
  54. .    ds L" ``
  55. .    ds R" ''
  56. 'br}
  57. ."
  58. ." If the F register is turned on, we'll generate index entries on stderr
  59. ." for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
  60. ." index entries marked with X<> in POD.  Of course, you'll have to process
  61. ." the output yourself in some meaningful fashion.
  62. .if nF {
  63. .    de IX
  64. .    tm Index:\$1t\n%t"\$2"
  65. ..
  66. .    nr % 0
  67. .    rr F
  68. .}
  69. ."
  70. ." For nroff, turn off justification.  Always turn off hyphenation; it
  71. ." makes way too many mistakes in technical documents.
  72. .hy 0
  73. .if n .na
  74. ."
  75. ." Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  76. ." Fear.  Run.  Save yourself.  No user-serviceable parts.
  77. .bd B 3
  78. .    " fudge factors for nroff and troff
  79. .if n {
  80. .    ds #H 0
  81. .    ds #V .8m
  82. .    ds #F .3m
  83. .    ds #[ f1
  84. .    ds #] fP
  85. .}
  86. .if t {
  87. .    ds #H ((1u-(\\n(.fu%2u))*.13m)
  88. .    ds #V .6m
  89. .    ds #F 0
  90. .    ds #[ &
  91. .    ds #] &
  92. .}
  93. .    " simple accents for nroff and troff
  94. .if n {
  95. .    ds ' &
  96. .    ds ` &
  97. .    ds ^ &
  98. .    ds , &
  99. .    ds ~ ~
  100. .    ds /
  101. .}
  102. .if t {
  103. .    ds ' \k:h'-(\n(.wu*8/10-*(#H)''h"|\n:u"
  104. .    ds ` \k:h'-(\n(.wu*8/10-*(#H)'`h'|\n:u'
  105. .    ds ^ \k:h'-(\n(.wu*10/11-*(#H)'^h'|\n:u'
  106. .    ds , \k:h'-(\n(.wu*8/10)',h'|\n:u'
  107. .    ds ~ \k:h'-(\n(.wu-*(#H-.1m)'~h'|\n:u'
  108. .    ds / \k:h'-(\n(.wu*8/10-*(#H)'z(slh'|\n:u'
  109. .}
  110. .    " troff and (daisy-wheel) nroff accents
  111. .ds : \k:h'-(\n(.wu*8/10-*(#H+.1m+*(#F)'v'-*(#V'z.h'.2m+*(#F'.h'|\n:u'v'*(#V'
  112. .ds 8 h'*(#H'(*bh'-*(#H'
  113. .ds o \k:h'-(\n(.wu+w'(de'u-*(#H)/2u'v'-.3n'*(#[z(dev'.3n'h'|\n:u'*(#]
  114. .ds d- h'*(#H'(pdh'-w'~'u'v'-.25m'f2(hyfPv'.25m'h'-*(#H'
  115. .ds D- D\k:h'-w'D'u'v'-.11m'z(hyv'.11m'h'|\n:u'
  116. .ds th *(#[v'.3m's+1Is-1v'-.3m'h'-(w'I'u*2/3)'s-1os+1*(#]
  117. .ds Th *(#[s+2Is-2h'-w'I'u*3/5'v'-.3m'ov'.3m'*(#]
  118. .ds ae ah'-(w'a'u*4/10)'e
  119. .ds Ae Ah'-(w'A'u*4/10)'E
  120. .    " corrections for vroff
  121. .if v .ds ~ \k:h'-(\n(.wu*9/10-*(#H)'s-2u~ds+2h'|\n:u'
  122. .if v .ds ^ \k:h'-(\n(.wu*10/11-*(#H)'v'-.4m'^v'.4m'h'|\n:u'
  123. .    " for low resolution devices (crt and lpr)
  124. .if n(.H>23 .if n(.V>19 
  125. {
  126. .    ds : e
  127. .    ds 8 ss
  128. .    ds o a
  129. .    ds d- dh'-1'(ga
  130. .    ds D- Dh'-1'(hy
  131. .    ds th o'bp'
  132. .    ds Th o'LP'
  133. .    ds ae ae
  134. .    ds Ae AE
  135. .}
  136. .rm #[ #] #H #V #F C
  137. ." ======================================================================
  138. ."
  139. .IX Title "GD 3"
  140. .TH GD 3 "perl v5.6.1" "1997-12-19" "User Contributed Perl Documentation"
  141. .UC
  142. .SH "NAME"
  143. &s-1GDs0.pm - Interface to Gd Graphics Library
  144. .SH "SYNOPSIS"
  145. .IX Header "SYNOPSIS"
  146. .Vb 1
  147. &    use GD;
  148. .Ve
  149. .Vb 2
  150. &    # create a new image
  151. &    $im = new GD::Image(100,100);
  152. .Ve
  153. .Vb 5
  154. &    # allocate some colors
  155. &    $white = $im->colorAllocate(255,255,255);
  156. &    $black = $im->colorAllocate(0,0,0);       
  157. &    $red = $im->colorAllocate(255,0,0);      
  158. &    $blue = $im->colorAllocate(0,0,255);
  159. .Ve
  160. .Vb 3
  161. &    # make the background transparent and interlaced
  162. &    $im->transparent($white);
  163. &    $im->interlaced('true');
  164. .Ve
  165. .Vb 2
  166. &    # Put a black frame around the picture
  167. &    $im->rectangle(0,0,99,99,$black);
  168. .Ve
  169. .Vb 2
  170. &    # Draw a blue oval
  171. &    $im->arc(50,50,95,75,0,360,$blue);
  172. .Ve
  173. .Vb 2
  174. &    # And fill it with red
  175. &    $im->fill(50,50,$red);
  176. .Ve
  177. .Vb 2
  178. &    # Convert the image to GIF and print it on standard output
  179. &    print $im->gif;
  180. .Ve
  181. .SH "DESCRIPTION"
  182. .IX Header "DESCRIPTION"
  183. &fBs-1GDs0.pmfR is a port of Thomas Boutell's gd graphics library (see
  184. below).  s-1GDs0 allows you to create color drawings using a large number of
  185. graphics primitives, and emit the drawings as s-1GIFs0 files.
  186. .PP
  187. &s-1GDs0 defines the following three classes:
  188. .if n .Ip "f(CW""""GD::Image""""fR" 5
  189. .el .Ip "f(CWGD::ImagefR" 5
  190. .IX Item "GD::Image"
  191. An image class, which holds the image data and accepts graphic
  192. primitive method calls.
  193. .if n .Ip "f(CW""""GD::Font""""fR" 5
  194. .el .Ip "f(CWGD::FontfR" 5
  195. .IX Item "GD::Font"
  196. A font class, which holds static font information and used for text
  197. rendering.
  198. .if n .Ip "f(CW""""GD::Polygon""""fR" 5
  199. .el .Ip "f(CWGD::PolygonfR" 5
  200. .IX Item "GD::Polygon"
  201. A simple polygon object, used for storing lists of vertices prior to
  202. rendering a polygon into an image.
  203. .PP
  204. A Simple Example:
  205. .PP
  206. .Vb 1
  207. &        #!/usr/local/bin/perl
  208. .Ve
  209. .Vb 1
  210. &        use GD;
  211. .Ve
  212. .Vb 2
  213. &        # create a new image
  214. &        $im = new GD::Image(100,100);
  215. .Ve
  216. .Vb 5
  217. &        # allocate some colors
  218. &        $white = $im->colorAllocate(255,255,255);
  219. &        $black = $im->colorAllocate(0,0,0);       
  220. &        $red = $im->colorAllocate(255,0,0);      
  221. &        $blue = $im->colorAllocate(0,0,255);
  222. .Ve
  223. .Vb 3
  224. &        # make the background transparent and interlaced
  225. &        $im->transparent($white);
  226. &        $im->interlaced('true');
  227. .Ve
  228. .Vb 2
  229. &        # Put a black frame around the picture
  230. &        $im->rectangle(0,0,99,99,$black);
  231. .Ve
  232. .Vb 2
  233. &        # Draw a blue oval
  234. &        $im->arc(50,50,95,75,0,360,$blue);
  235. .Ve
  236. .Vb 2
  237. &        # And fill it with red
  238. &        $im->fill(50,50,$red);
  239. .Ve
  240. .Vb 2
  241. &        # Convert the image to GIF and print it on standard output
  242. &        print $im->gif;
  243. .Ve
  244. Notes:
  245. .Ip "1. To create a new, empty image, send a fInew()fR message to s-1GD:s0:Image, passing it the width and height of the image you want to create.  An image object will be returned.  Other class methods allow you to initialize an image from a preexisting s-1GIFs0, s-1GDs0 or s-1XBMs0 file." 5
  246. .IX Item "1. To create a new, empty image, send a new() message to GD::Image, passing it the width and height of the image you want to create.  An image object will be returned.  Other class methods allow you to initialize an image from a preexisting GIF, GD or XBM file."
  247. .PD 0
  248. .Ip "2. Next you will ordinarily add colors to the image's color table. colors are added using a fIcolorAllocate()fR method call.  The three parameters in each call are the red, green and blue (rgb) triples for the desired color.  The method returns the index of that color in the image's color table.  You should store these indexes for later use." 5
  249. .IX Item "2. Next you will ordinarily add colors to the image's color table. colors are added using a colorAllocate() method call.  The three parameters in each call are the red, green and blue (rgb) triples for the desired color.  The method returns the index of that color in the image's color table.  You should store these indexes for later use."
  250. .Ip "3. Now you can do some drawing!  The various graphics primitives are described below.  In this example, we do some text drawing, create an oval, and create and draw a polygon." 5
  251. .IX Item "3. Now you can do some drawing!  The various graphics primitives are described below.  In this example, we do some text drawing, create an oval, and create and draw a polygon."
  252. .Ip "4. Polygons are created with a fInew()fR message to s-1GD:s0:Polygon.  You can add points to the returned polygon one at a time using the fIaddPt()fR method. The polygon can then be passed to an image for rendering." 5
  253. .IX Item "4. Polygons are created with a new() message to GD::Polygon.  You can add points to the returned polygon one at a time using the addPt() method. The polygon can then be passed to an image for rendering."
  254. .Ip "5. When you're done drawing, you can convert the image into s-1GIFs0 format by sending it a fIgif()fR message.  It will return a (potentially large) scalar value containing the binary data for the image.  Ordinarily you will print it out at this point or write it to a file." 5
  255. .IX Item "5. When you're done drawing, you can convert the image into GIF format by sending it a gif() message.  It will return a (potentially large) scalar value containing the binary data for the image.  Ordinarily you will print it out at this point or write it to a file."
  256. .PD
  257. .SH "Method Calls"
  258. .IX Header "Method Calls"
  259. .Sh "Creating and Saving Images"
  260. .IX Subsection "Creating and Saving Images"
  261. .if n .Ip "f(CW""""new""""fR" 5
  262. .el .Ip "f(CWnewfR" 5
  263. .IX Item "new"
  264. &f(CW*(C`GD::Image::new(width,height)*(C'fR fIclass methodfR
  265. .Sp
  266. To create a new, blank image, send a fInew()fR message to the s-1GD:s0:Image
  267. class.  For example:
  268. .Sp
  269. .Vb 1
  270. &        $myImage = new GD::Image(100,100) || die;
  271. .Ve
  272. This will create an image that is 100 x 100 pixels wide.  If you don't
  273. specify the dimensions, a default of 64 x 64 will be chosen. If
  274. something goes wrong (e.g. insufficient memory), this call will
  275. return undef.
  276. .if n .Ip "f(CW""""newFromGif""""fR" 5
  277. .el .Ip "f(CWnewFromGiffR" 5
  278. .IX Item "newFromGif"
  279. &f(CW*(C`GD::Image::newFromGif(FILEHANDLE)*(C'fR fIclass methodfR
  280. .Sp
  281. This will create an image from a s-1GIFs0 file read in through the provided
  282. filehandle.  The filehandle must previously have been opened on a
  283. valid s-1GIFs0 file or pipe.  If successful, this call will return an
  284. initialized image which you can then manipulate as you please.  If it
  285. fails, which usually happens if the thing at the other end of the
  286. filehandle is not a valid s-1GIFs0 file, the call returns undef.  Notice
  287. that the call doesn't automatically close the filehandle for you.
  288. .Sp
  289. To get information about the size and color usage of the information,
  290. you can call the image query methods described below.
  291. .Sp
  292. .Vb 1
  293. &        Example usage:
  294. .Ve
  295. .Vb 3
  296. &        open (GIF,"barnswallow.gif") || die;
  297. &        $myImage = newFromGif GD::Image(GIF) || die;
  298. &        close GIF;
  299. .Ve
  300. .if n .Ip "f(CW""""newFromXbm""""fR" 5
  301. .el .Ip "f(CWnewFromXbmfR" 5
  302. .IX Item "newFromXbm"
  303. &f(CW*(C`GD::Image::newFromXbm(FILEHANDLE)*(C'fR fIclass methodfR
  304. .Sp
  305. This works in exactly the same way as f(CW*(C`newFromGif*(C'fR, but reads the
  306. contents of an X Bitmap file:
  307. .Sp
  308. .Vb 3
  309. &        open (XBM,"coredump.xbm") || die;
  310. &        $myImage = newFromXbm GD::Image(XBM) || die;
  311. &        close XBM;
  312. .Ve
  313. .if n .Ip "f(CW""""newFromGd""""fR" 5
  314. .el .Ip "f(CWnewFromGdfR" 5
  315. .IX Item "newFromGd"
  316. &f(CW*(C`GD::Image::newFromGd(FILEHANDLE)*(C'fR fIclass methodfR
  317. .Sp
  318. This works in exactly the same way as f(CW*(C`newFromGif*(C'fR, but reads the
  319. contents of a s-1GDs0 file.  s-1GDs0 is Tom Boutell's disk-based storage format,
  320. intended for the rare case when you need to read and write the image
  321. to disk quickly.  It's not intended for regular use, because, unlike
  322. &s-1GIFs0 or s-1JPEGs0, no image compression is performed and these files can
  323. become fBs-1BIGs0fR.
  324. .Sp
  325. .Vb 3
  326. &        open (GDF,"godzilla.gd") || die;
  327. &        $myImage = newFromGd GD::Image(GDF) || die;
  328. &        close GDF;
  329. .Ve
  330. .if n .Ip "f(CW""""gif""""fR" 5
  331. .el .Ip "f(CWgiffR" 5
  332. .IX Item "gif"
  333. &f(CW*(C`GD::Image::gif*(C'fR fIobject methodfR
  334. .Sp
  335. This returns the image data in s-1GIFs0 format.  You can then print it,
  336. pipe it to a display program, or write it to a file.  Example:
  337. .Sp
  338. .Vb 4
  339. &        $gif_data = $myImage->gif;
  340. &        open (DISPLAY,"| display -") || die;
  341. &        print DISPLAY $gif_data;
  342. &        close DISPLAY;
  343. .Ve
  344. .if n .Ip "f(CW""""gd""""fR" 5
  345. .el .Ip "f(CWgdfR" 5
  346. .IX Item "gd"
  347. &f(CW*(C`GD::Image::gd*(C'fR fIobject methodfR
  348. .Sp
  349. This returns the image data in s-1GDs0 format.  You can then print it,
  350. pipe it to a display program, or write it to a file.  Example:
  351. .Sp
  352. .Vb 1
  353. &        print MYOUTFILE $myImage->gd;
  354. .Ve
  355. .Sh "Color Control"
  356. .IX Subsection "Color Control"
  357. .if n .Ip "f(CW""""colorAllocate""""fR" 5
  358. .el .Ip "f(CWcolorAllocatefR" 5
  359. .IX Item "colorAllocate"
  360. &f(CW*(C`GD::Image::colorAllocate(red,green,blue)*(C'fR fIobject methodfR
  361. .Sp
  362. This allocates a color with the specified red, green and blue
  363. components and returns its index in the color table, if specified.
  364. The first color allocated in this way becomes the image's background
  365. color.  (255,255,255) is white (all pixels on).  (0,0,0) is black (all
  366. pixels off).  (255,0,0) is fully saturated red.  (127,127,127) is 50%
  367. gray.  You can find plenty of examples in /usr/X11/lib/X11/rgb.txt.
  368. .Sp
  369. If no colors are allocated, then this function returns -1.
  370. .Sp
  371. Example:
  372. .Sp
  373. .Vb 3
  374. &        $white = $myImage->colorAllocate(0,0,0); #background color
  375. &        $black = $myImage->colorAllocate(255,255,255);
  376. &        $peachpuff = $myImage->colorAllocate(255,218,185);
  377. .Ve
  378. .if n .Ip "f(CW""""colorDeallocate""""fR" 5
  379. .el .Ip "f(CWcolorDeallocatefR" 5
  380. .IX Item "colorDeallocate"
  381. &f(CW*(C`GD::Image::colorDeallocate(colorIndex)*(C'fR fIobject methodfR 
  382. .Sp
  383. This marks the color at the specified index as being ripe for
  384. reallocation.  The next time colorAllocate is used, this entry will be
  385. replaced.  You can call this method several times to deallocate
  386. multiple colors.  There's no function result from this call.
  387. .Sp
  388. Example:
  389. .Sp
  390. .Vb 2
  391. &        $myImage->colorDeallocate($peachpuff);
  392. &        $peachy = $myImage->colorAllocate(255,210,185);
  393. .Ve
  394. .if n .Ip "f(CW""""colorClosest""""fR" 5
  395. .el .Ip "f(CWcolorClosestfR" 5
  396. .IX Item "colorClosest"
  397. &f(CW*(C`GD::Image::colorClosest(red,green,blue)*(C'fR fIobject methodfR
  398. .Sp
  399. This returns the index of the color closest in the color table to the
  400. red green and blue components specified.  If no colors have yet been
  401. allocated, then this call returns -1.
  402. .Sp
  403. Example:
  404. .Sp
  405. .Vb 1
  406. &        $apricot = $myImage->colorClosest(255,200,180);
  407. .Ve
  408. .if n .Ip "f(CW""""colorExact""""fR" 5
  409. .el .Ip "f(CWcolorExactfR" 5
  410. .IX Item "colorExact"
  411. &f(CW*(C`GD::Image::colorExact(red,green,blue)*(C'fR fIobject methodfR
  412. .Sp
  413. This returns the index of a color that exactly matches the specified
  414. red green and blue components.  If such a color is not in the color
  415. table, this call returns -1.
  416. .Sp
  417. .Vb 2
  418. &        $rosey = $myImage->colorExact(255,100,80);
  419. &        warn "Everything's coming up roses.en" if $rosey >= 0;
  420. .Ve
  421. .if n .Ip "f(CW""""colorsTotal""""fR" 5
  422. .el .Ip "f(CWcolorsTotalfR" 5
  423. .IX Item "colorsTotal"
  424. &f(CW*(C`GD::Image::colorsTotal)*(C'fR fIobject methodfR
  425. .Sp
  426. This returns the total number of colors allocated in the object.
  427. .Sp
  428. .Vb 1
  429. &        $maxColors = $myImage->colorsTotal;
  430. .Ve
  431. .if n .Ip "f(CW""""getPixel""""fR" 5
  432. .el .Ip "f(CWgetPixelfR" 5
  433. .IX Item "getPixel"
  434. &f(CW*(C`GD::Image::getPixel(x,y)*(C'fR fIobject methodfR
  435. .Sp
  436. This returns the color table index underneath the specified
  437. point.  It can be combined with fIrgb()fR
  438. to obtain the rgb color underneath the pixel.
  439. .Sp
  440. Example:
  441. .Sp
  442. .Vb 2
  443. &        $index = $myImage->getPixel(20,100);
  444. &        ($r,$g,$b) = $myImage->rgb($index);
  445. .Ve
  446. .if n .Ip "f(CW""""rgb""""fR" 5
  447. .el .Ip "f(CWrgbfR" 5
  448. .IX Item "rgb"
  449. &f(CW*(C`GD::Image::rgb(colorIndex)*(C'fR fIobject methodfR
  450. .Sp
  451. This returns a list containing the red, green and blue components of
  452. the specified color index.
  453. .Sp
  454. Example:
  455. .Sp
  456. .Vb 1
  457. &        @RGB = $myImage->rgb($peachy);
  458. .Ve
  459. .if n .Ip "f(CW""""transparent""""fR" 5
  460. .el .Ip "f(CWtransparentfR" 5
  461. .IX Item "transparent"
  462. &f(CW*(C`GD::Image::transparent(colorIndex)*(C'fR fIobject methodfR
  463. .Sp
  464. This marks the color at the specified index as being transparent.
  465. Portions of the image drawn in this color will be invisible.  This is
  466. useful for creating paintbrushes of odd shapes, as well as for
  467. making s-1GIFs0 backgrounds transparent for displaying on the Web.  Only
  468. one color can be transparent at any time. To disable transparency, 
  469. specify -1 for the index.  
  470. .Sp
  471. If you call this method without any parameters, it will return the
  472. current index of the transparent color, or -1 if none.
  473. .Sp
  474. Example:
  475. .Sp
  476. .Vb 5
  477. &        open(GIF,"test.gif");
  478. &        $im = newFromGif GD::Image(GIF);
  479. &        $white = $im->colorClosest(255,255,255); # find white
  480. &        $im->transparent($white);
  481. &        print $im->gif;
  482. .Ve
  483. .Sh "Special Colors"
  484. .IX Subsection "Special Colors"
  485. &s-1GDs0 implements a number of special colors that can be used to achieve
  486. special effects.  They are constants defined in the s-1GD::s0
  487. namespace, but automatically exported into your namespace when the s-1GDs0
  488. module is loaded.
  489. .if n .Ip "f(CW""""setBrush""""fR" 5
  490. .el .Ip "f(CWsetBrushfR" 5
  491. .IX Item "setBrush"
  492. .PD 0
  493. .if n .Ip "f(CW""""gdBrushed""""fR" 5
  494. .el .Ip "f(CWgdBrushedfR" 5
  495. .IX Item "gdBrushed"
  496. .PD
  497. &f(CW*(C`GD::Image::setBrush( )*(C'fR and f(CW*(C`GD::gdBrushed*(C'fR
  498. .Sp
  499. You can draw lines and shapes using a brush pattern.  Brushes are 
  500. just images that you can create and manipulate in the usual way. When
  501. you draw with them, their contents are used for the color and shape of
  502. the lines.
  503. .Sp
  504. To make a brushed line, you must create or load the brush first, then
  505. assign it to the image using f(CW*(C`setBrush*(C'fR.  You can then draw in that
  506. with that brush using the f(CW*(C`gdBrushed*(C'fR special color.  It's often 
  507. useful to set the background of the brush to transparent so that 
  508. the non-colored parts don't overwrite other parts of your image.
  509. .Sp
  510. Example:
  511. .Sp
  512. .Vb 6
  513. &        # Create a brush at an angle
  514. &        $diagonal_brush = new GD::Image(5,5);
  515. &        $white = $diagonal_brush->allocateColor(255,255,255);
  516. &        $black = $diagonal_brush->allocateColor(0,0,0);
  517. &        $diagonal_brush->transparent($white);
  518. &        $diagonal_brush->line(0,4,4,0,$black); # NE diagonal
  519. .Ve
  520. .Vb 2
  521. &        # Set the brush
  522. &        $myImage->setBrush($diagonal_brush);
  523. .Ve
  524. .Vb 2
  525. &        # Draw a circle using the brush
  526. &        $myImage->arc(50,50,25,25,0,360,gdBrushed);
  527. .Ve
  528. .if n .Ip "f(CW""""setStyle""""fR" 5
  529. .el .Ip "f(CWsetStylefR" 5
  530. .IX Item "setStyle"
  531. .PD 0
  532. .if n .Ip "f(CW""""gdStyled""""fR" 5
  533. .el .Ip "f(CWgdStyledfR" 5
  534. .IX Item "gdStyled"
  535. .PD
  536. &f(CW*(C`GD::Image::setStyle(@colors)*(C'fR and f(CW*(C`GD::gdStyled*(C'fR
  537. .Sp
  538. Styled lines consist of an arbitrary series of repeated colors and are
  539. useful for generating dotted and dashed lines.  To create a styled
  540. line, use f(CW*(C`setStyle*(C'fR to specify a repeating series of colors.  It
  541. accepts an array consisting of one or more color indexes.  Then
  542. draw using the f(CW*(C`gdStyled*(C'fR special color.  Another special color,
  543. &f(CW*(C`gdTransparent*(C'fR can be used to introduce holes in the line, as the
  544. example shows.
  545. .Sp
  546. Example:
  547. .Sp
  548. .Vb 6
  549. &        # Set a style consisting of 4 pixels of yellow,
  550. &        # 4 pixels of blue, and a 2 pixel gap
  551. &        $myImage->setStyle($yellow,$yellow,$yellow,$yellow,
  552. &                           $blue,$blue,$blue,$blue,
  553. &                           gdTransparent,gdTransparent);
  554. &        $myImage->arc(50,50,25,25,0,360,gdStyled);
  555. .Ve
  556. To combine the f(CW*(C`gdStyled*(C'fR and f(CW*(C`gdBrushed*(C'fR behaviors, you can specify
  557. &f(CW*(C`gdStyledBrushed*(C'fR.  In this case, a pixel from the current brush
  558. pattern is rendered wherever the color specified in fIsetStyle()fR is
  559. neither gdTransparent nor 0.
  560. .if n .Ip "f(CW""""gdTiled""""fR" 5
  561. .el .Ip "f(CWgdTiledfR" 5
  562. .IX Item "gdTiled"
  563. Draw filled shapes and flood fills using a pattern.  The pattern is
  564. just another image.  The image will be tiled multiple times in order
  565. to fill the required space, creating wallpaper effects.  You must call
  566. &f(CW*(C`setTile*(C'fR in order to define the particular tile pattern you'll use
  567. for drawing when you specify the gdTiled color.
  568. details.
  569. .if n .Ip "f(CW""""gdStyled""""fR" 5
  570. .el .Ip "f(CWgdStyledfR" 5
  571. .IX Item "gdStyled"
  572. The gdStyled color is used for creating dashed and dotted lines.  A
  573. styled line can contain any series of colors and is created using the
  574. &f(CW*(C`setStyled*(C'fR command.
  575. .Sh "Drawing Commands"
  576. .IX Subsection "Drawing Commands"
  577. .if n .Ip "f(CW""""setPixel""""fR" 5
  578. .el .Ip "f(CWsetPixelfR" 5
  579. .IX Item "setPixel"
  580. &f(CW*(C`GD::Image::setPixel(x,y,color)*(C'fR fIobject methodfR 
  581. .Sp
  582. This sets the pixel at (x,y) to the specified color index.  No value
  583. is returned from this method.  The coordinate system starts at the
  584. upper left at (0,0) and gets larger as you go down and to the right.
  585. You can use a real color, or one of the special colors gdBrushed, 
  586. gdStyled and gdStyledBrushed can be specified.
  587. .Sp
  588. Example:
  589. .Sp
  590. .Vb 2
  591. &        # This assumes $peach already allocated
  592. &        $myImage->setPixel(50,50,$peach);
  593. .Ve
  594. .if n .Ip "f(CW""""line""""fR" 5
  595. .el .Ip "f(CWlinefR" 5
  596. .IX Item "line"
  597. &f(CW*(C`GD::Image::line(x1,y1,x2,y2,color)*(C'fR fIobject methodfR
  598. .Sp
  599. This draws a line from (x1,y1) to (x2,y2) of the specified color.  You
  600. can use a real color, or one of the special colors gdBrushed, 
  601. gdStyled and gdStyledBrushed.
  602. .Sp
  603. Example:
  604. .Sp
  605. .Vb 3
  606. &        # Draw a diagonal line using the currently defind
  607. &        # paintbrush pattern.
  608. &        $myImage->line(0,0,150,150,gdBrushed);
  609. .Ve
  610. .if n .Ip "f(CW""""dashedLine""""fR" 5
  611. .el .Ip "f(CWdashedLinefR" 5
  612. .IX Item "dashedLine"
  613. &f(CW*(C`GD::Image::dashedLine(x1,y1,x2,y2,color)*(C'fR fIobject methodfR
  614. .Sp
  615. This draws a dashed line from (x1,y1) to (x2,y2) in the specified
  616. color.  A more powerful way to generate arbitrary dashed and dotted
  617. lines is to use the fIsetStyle()fR method described below and to draw with
  618. the special color gdStyled.
  619. .Sp
  620. Example:
  621. .Sp
  622. .Vb 1
  623. &        $myImage->dashedLine(0,0,150,150,$blue);
  624. .Ve
  625. .if n .Ip "f(CW""""rectangle""""fR" 5
  626. .el .Ip "f(CWrectanglefR" 5
  627. .IX Item "rectangle"
  628. &f(CW*(C`GD::Image::rectangle(x1,y1,x2,y2,color)*(C'fR fIobject methodfR
  629. .Sp
  630. This draws a rectangle with the specified color.  (x1,y1) and (x2,y2)
  631. are the upper left and lower right corners respectively.  Both real 
  632. color indexes and the special colors gdBrushed, gdStyled and 
  633. gdStyledBrushed are accepted.
  634. .Sp
  635. Example:
  636. .Sp
  637. .Vb 1
  638. &        $myImage->rectangle(10,10,100,100,$rose);
  639. .Ve
  640. .if n .Ip "f(CW""""filledRectangle""""fR" 5
  641. .el .Ip "f(CWfilledRectanglefR" 5
  642. .IX Item "filledRectangle"
  643. &f(CW*(C`GD::Image::filledRectangle(x1,y1,x2,y2,color)*(C'fR fIobject methodfR
  644. .Sp
  645. This draws a rectangle filed with the specified color.  You can use a
  646. real color, or the special fill color gdTiled to fill the polygon
  647. with a pattern.
  648. .Sp
  649. Example:
  650. .Sp
  651. .Vb 4
  652. &        # read in a fill pattern and set it
  653. &        open(GIF,"happyface.gif") || die;
  654. &        $tile = newFromGif GD::Image(GIF);
  655. &        $myImage->setTile($tile);
  656. .Ve
  657. .Vb 2
  658. &        # draw the rectangle, filling it with the pattern
  659. &        $myImage->filledRectangle(10,10,150,200,gdTiled);
  660. .Ve
  661. .if n .Ip "f(CW""""polygon""""fR" 5
  662. .el .Ip "f(CWpolygonfR" 5
  663. .IX Item "polygon"
  664. &f(CW*(C`GD::Image::polygon(polygon,color)*(C'fR fIobject methodfR 
  665. .Sp
  666. This draws a polygon with the specified color.  The polygon must be
  667. created first (see below).  The polygon must have at least three
  668. vertices.  If the last vertex doesn't close the polygon, the method
  669. will close it for you.  Both real color indexes and the special 
  670. colors gdBrushed, gdStyled and gdStyledBrushed can be specified.
  671. .Sp
  672. Example:
  673. .Sp
  674. .Vb 5
  675. &        $poly = new GD::Polygon;
  676. &        $poly->addPt(50,0);
  677. &        $poly->addPt(99,99);
  678. &        $poly->addPt(0,99);
  679. &        $myImage->polygon($poly,$blue);
  680. .Ve
  681. .if n .Ip "f(CW""""filledPolygon""""fR" 5
  682. .el .Ip "f(CWfilledPolygonfR" 5
  683. .IX Item "filledPolygon"
  684. &f(CW*(C`GD::Image::filledPolygon(poly,color)*(C'fR fIobject methodfR
  685. .Sp
  686. This draws a polygon filled with the specified color.  You can use a
  687. real color, or the special fill color gdTiled to fill the polygon
  688. with a pattern.
  689. .Sp
  690. Example:
  691. .Sp
  692. .Vb 5
  693. &        # make a polygon
  694. &        $poly = new GD::Polygon;
  695. &        $poly->addPt(50,0);
  696. &        $poly->addPt(99,99);
  697. &        $poly->addPt(0,99);
  698. .Ve
  699. .Vb 2
  700. &        # draw the polygon, filling it with a color
  701. &        $myImage->filledPolygon($poly,$peachpuff);
  702. .Ve
  703. .if n .Ip "f(CW""""arc""""fR" 5
  704. .el .Ip "f(CWarcfR" 5
  705. .IX Item "arc"
  706. &f(CW*(C`GD::Image::arc(cx,cy,width,height,start,end,color)*(C'fR fIobject methodfR
  707. .Sp
  708. This draws arcs and ellipses.  (cx,cy) are the center of the arc, and
  709. (width,height) specify the width and height, respectively.  The
  710. portion of the ellipse covered by the arc are controlled by start and
  711. end, both of which are given in degrees from 0 to 360.  Zero is at the
  712. top of the ellipse, and angles increase clockwise.  To specify a
  713. complete ellipse, use 0 and 360 as the starting and ending angles.  To
  714. draw a circle, use the same value for width and height.
  715. .Sp
  716. You can specify a normal color or one of the special colors gdBrushed,
  717. gdStyled, or gdStyledBrushed.
  718. .Sp
  719. Example:
  720. .Sp
  721. .Vb 2
  722. &        # draw a semicircle centered at 100,100
  723. &        $myImage->arc(100,100,50,50,0,180,$blue);
  724. .Ve
  725. .if n .Ip "f(CW""""fill""""fR" 5
  726. .el .Ip "f(CWfillfR" 5
  727. .IX Item "fill"
  728. &f(CW*(C`GD::Image::fill(x,y,color)*(C'fR fIobject methodfR
  729. .Sp
  730. This method flood-fills regions with the specified color.  The color
  731. will spread through the image, starting at point (x,y), until it is
  732. stopped by a pixel of a different color from the starting pixel (this
  733. is similar to the *(L"paintbucket*(R" in many popular drawing toys).  You
  734. can specify a normal color, or the special color gdTiled, to flood-fill
  735. with patterns.
  736. .Sp
  737. Example:
  738. .Sp
  739. .Vb 3
  740. &        # Draw a rectangle, and then make its interior blue
  741. &        $myImage->rectangle(10,10,100,100,$black);
  742. &        $myImage->fill(50,50,$blue);
  743. .Ve
  744. .if n .Ip "f(CW""""GD::Image::fillToBorder(x,y,bordercolor,color)""""fR fIobject methodfR" 5
  745. .el .Ip "f(CWGD::Image::fillToBorder(x,y,bordercolor,color)fR fIobject methodfR" 5
  746. .IX Item "GD::Image::fillToBorder(x,y,bordercolor,color) object method"
  747. Like f(CW*(C`fill*(C'fR, this method flood-fills regions with the specified color,
  748. starting at position (x,y).
  749. However, instead of stopping when it hits a pixel of a different color
  750. than the starting pixel, flooding will only stop when it hits the
  751. color specified by bordercolor.  You must specify a normal indexed
  752. color for the bordercolor.  However, you are free to use the gdTiled
  753. color for the fill.
  754. .Sp
  755. Example:
  756. .Sp
  757. .Vb 3
  758. &        # This has the same effect as the previous example
  759. &        $myImage->rectangle(10,10,100,100,$black);
  760. &        $myImage->fillToBorder(50,50,$black,$blue);
  761. .Ve
  762. .Sh "Image Copying Commands"
  763. .IX Subsection "Image Copying Commands"
  764. Two methods are provided for copying a rectangular region from one
  765. image to another.  One method copies a region without resizing it.
  766. The other allows you to stretch the region during the copy operation.
  767. .PP
  768. With either of these methods it is important to know that the routines
  769. will attempt to flesh out the destination image's color table to match
  770. the colors that are being copied from the source.  If the
  771. destination's color table is already full, then the routines will
  772. attempt to find the best match, with varying results.
  773. .if n .Ip "f(CW""""copy""""fR" 5
  774. .el .Ip "f(CWcopyfR" 5
  775. .IX Item "copy"
  776. &f(CW*(C`GD::Image::copy(sourceImage,dstX,dstY,srcX,srcY,width,height)*(C'fR fIobject methodfR
  777. .Sp
  778. This is the simpler of the two copy operations, copying the specified
  779. region from the source image to the destination image (the one
  780. performing the method call).  (srcX,srcY) specify the upper left
  781. corner of a rectangle in the source image, and (width,height) give the
  782. width and height of the region to copy.  (dstX,dstY) control where in
  783. the destination image to stamp the copy.  You can use the same image
  784. for both the source and the destination, but the source and
  785. destination regions must not overlap or strange things will happen.
  786. .Sp
  787. Example:
  788. .Sp
  789. .Vb 7
  790. &        $myImage = new GD::Image(100,100);
  791. &        ... various drawing stuff ...
  792. &        $srcImage = new GD::Image(50,50);
  793. &        ... more drawing stuff ...
  794. &        # copy a 25x25 pixel region from $srcImage to
  795. &        # the rectangle starting at (10,10) in $myImage
  796. &        $myImage->copy($srcImage,10,10,0,0,25,25);
  797. .Ve
  798. .if n .Ip "f(CW""""copyResized""""fR" 5
  799. .el .Ip "f(CWcopyResizedfR" 5
  800. .IX Item "copyResized"
  801. &f(CW*(C`GD::Image::copyResized(sourceImage,dstX,dstY,srcX,srcY,destW,destH,srcW,srcH)*(C'fR fIobject methodfR
  802. .Sp
  803. This method is similar to fIcopy()fR but allows you to choose different
  804. sizes for the source and destination rectangles.  The source and
  805. destination rectangle's are specified independently by (srcW,srcH) and
  806. (destW,destH) respectively.  fIcopyResized()fR will stretch or shrink the
  807. image to accomodate the size requirements.
  808. .Sp
  809. Example:
  810. .Sp
  811. .Vb 7
  812. &        $myImage = new GD::Image(100,100);
  813. &        ... various drawing stuff ...
  814. &        $srcImage = new GD::Image(50,50);
  815. &        ... more drawing stuff ...
  816. &        # copy a 25x25 pixel region from $srcImage to
  817. &        # a larger rectangle starting at (10,10) in $myImage
  818. &        $myImage->copyResized($srcImage,10,10,0,0,50,50,25,25);
  819. .Ve
  820. .Sh "Character and String Drawing"
  821. .IX Subsection "Character and String Drawing"
  822. Gd allows you to draw characters and strings, either in normal
  823. horizontal orientation or rotated 90 degrees.  These routines use a
  824. &s-1GD:s0:Font object, described in more detail below.  There are four
  825. built-in fonts, available in global variables gdLargeFont,
  826. gdMediumBoldFont, gdSmallFont and gdTinyFont.  Currently there is no
  827. way of dynamically creating your own fonts.
  828. .if n .Ip "f(CW""""string""""fR" 5
  829. .el .Ip "f(CWstringfR" 5
  830. .IX Item "string"
  831. &f(CW*(C`GD::Image::string(font,x,y,string,color)*(C'fR fIObject MethodfR
  832. .Sp
  833. This method draws a string startin at position (x,y) in the specified
  834. font and color.  Your choices of fonts are gdSmallFont, gdMediumBoldFont,
  835. gdTinyFont and gdLargeFont.
  836. .Sp
  837. Example:
  838. .Sp
  839. .Vb 1
  840. &        $myImage->string(gdSmallFont,2,10,"Peachy Keen",$peach);
  841. .Ve
  842. .if n .Ip "f(CW""""stringUp""""fR" 5
  843. .el .Ip "f(CWstringUpfR" 5
  844. .IX Item "stringUp"
  845. &f(CW*(C`GD::Image::stringUp(font,x,y,string,color)*(C'fR fIObject MethodfR
  846. .Sp
  847. Just like the previous call, but draws the text rotated
  848. counterclockwise 90 degrees.
  849. .if n .Ip "f(CW""""char""""fR" 5
  850. .el .Ip "f(CWcharfR" 5
  851. .IX Item "char"
  852. .PD 0
  853. .if n .Ip "f(CW""""charUp""""fR" 5
  854. .el .Ip "f(CWcharUpfR" 5
  855. .IX Item "charUp"
  856. .PD
  857. &f(CW*(C`GD::Image::char(font,x,y,char,color)*(C'fR fIObject MethodfR
  858. &f(CW*(C`GD::Image::charUp(font,x,y,char,color)*(C'fR fIObject MethodfR
  859. .Sp
  860. These methods draw single characters at position (x,y) in the
  861. specified font and color.  They're carry-overs from the C interface,
  862. where there is a distinction between characters and strings.  Perl is
  863. insensible to such subtle distinctions.
  864. .Sh "Miscellaneous Image Methods"
  865. .IX Subsection "Miscellaneous Image Methods"
  866. .if n .Ip "f(CW""""interlaced""""fR" 5
  867. .el .Ip "f(CWinterlacedfR" 5
  868. .IX Item "interlaced"
  869. &f(CW*(C`GD::Image::interlaced( )*(C'fR f(CW*(C`GD::Image::interlaced(1)*(C'fR fIObject methodfR
  870. .Sp
  871. This method sets or queries the image's interlaced setting.  Interlace
  872. produces a cool venetian blinds effect on certain viewers.  Provide a
  873. true parameter to set the interlace attribute.  Provide undef to
  874. disable it.  Call the method without parameters to find out the
  875. current setting.
  876. .Ip "c<getBounds>" 5
  877. .IX Item "c<getBounds>"
  878. &f(CW*(C`GD::Image::getBounds( )*(C'fR fIObject methodfR
  879. .Sp
  880. This method will return a two-member list containing the width and
  881. height of the image.  You query but not not change the size of the
  882. image once it's created.
  883. .Sh "Polygon Methods"
  884. .IX Subsection "Polygon Methods"
  885. A few primitive polygon creation and manipulation methods are
  886. provided.  They aren't part of the Gd library, but I thought they
  887. might be handy to have around (they're borrowed from my qd.pl
  888. Quickdraw library).
  889. .Ip "c<new>" 5
  890. .IX Item "c<new>"
  891. &f(CW*(C`GD::Polygon::new*(C'fR fIclass methodfR
  892. .Sp
  893. Create an empty polygon with no vertices.
  894. .Sp
  895. .Vb 1
  896. &        $poly = new GD::Polygon;
  897. .Ve
  898. .if n .Ip "f(CW""""addPt""""fR" 5
  899. .el .Ip "f(CWaddPtfR" 5
  900. .IX Item "addPt"
  901. &f(CW*(C`GD::Polygon::addPt(x,y)*(C'fR fIobject methodfR
  902. .Sp
  903. Add point (x,y) to the polygon.
  904. .Sp
  905. .Vb 4
  906. &        $poly->addPt(0,0);
  907. &        $poly->addPt(0,50);
  908. &        $poly->addPt(25,25);
  909. &        $myImage->fillPoly($poly,$blue);
  910. .Ve
  911. .if n .Ip "f(CW""""getPt""""fR" 5
  912. .el .Ip "f(CWgetPtfR" 5
  913. .IX Item "getPt"
  914. &f(CW*(C`GD::Polygon::getPt(index)*(C'fR fIobject methodfR
  915. .Sp
  916. Retrieve the point at the specified vertex.
  917. .Sp
  918. .Vb 1
  919. &        ($x,$y) = $poly->getPt(2);
  920. .Ve
  921. .if n .Ip "f(CW""""setPt""""fR" 5
  922. .el .Ip "f(CWsetPtfR" 5
  923. .IX Item "setPt"
  924. &f(CW*(C`GD::Polygon::setPt(index,x,y)*(C'fR fIobject methodfR
  925. .Sp
  926. Change the value of an already existing vertex.  It is an error to set
  927. a vertex that isn't already defined.
  928. .Sp
  929. .Vb 1
  930. &        $poly->setPt(2,100,100);
  931. .Ve
  932. .if n .Ip "f(CW""""deletePt""""fR" 5
  933. .el .Ip "f(CWdeletePtfR" 5
  934. .IX Item "deletePt"
  935. &f(CW*(C`GD::Polygon:deletePt(index)*(C'fR fIobject methodfR
  936. .Sp
  937. Delete the specified vertex, returning its value.
  938. .Sp
  939. .Vb 1
  940. &        ($x,$y) = $poly->deletePt(1);
  941. .Ve
  942. .if n .Ip "f(CW""""toPt""""fR" 5
  943. .el .Ip "f(CWtoPtfR" 5
  944. .IX Item "toPt"
  945. &f(CW*(C`GD::Polygon::toPt(dx,dy)*(C'fR fIobject methodfR
  946. .Sp
  947. Draw from current vertex to a new vertex, using relative 
  948. (dx,dy) coordinates.  If this is the first point, act like
  949. &fIaddPt()fR.
  950. .Sp
  951. .Vb 4
  952. &        $poly->addPt(0,0);
  953. &        $poly->toPt(0,50);
  954. &        $poly->toPt(25,-25);
  955. &        $myImage->fillPoly($poly,$blue);
  956. .Ve
  957. .if n .Ip "f(CW""""length""""fR" 5
  958. .el .Ip "f(CWlengthfR" 5
  959. .IX Item "length"
  960. &f(CW*(C`GD::Polygon::length*(C'fR fIobject methodfR
  961. .Sp
  962. Return the number of vertices in the polygon.
  963. .Sp
  964. .Vb 1
  965. &        $points = $poly->length;
  966. .Ve
  967. .if n .Ip "f(CW""""vertices""""fR" 5
  968. .el .Ip "f(CWverticesfR" 5
  969. .IX Item "vertices"
  970. &f(CW*(C`GD::Polygon::vertices*(C'fR fIobject methodfR
  971. .Sp
  972. Return a list of all the verticies in the polygon object.  Each
  973. membver of the list is a reference to an (x,y) array.
  974. .Sp
  975. .Vb 4
  976. &        @vertices = $poly->vertices;
  977. &        foreach $v (@vertices)
  978. &           print join(",",@$v),"en";
  979. &        }
  980. .Ve
  981. .if n .Ip "f(CW""""bounds""""fR" 5
  982. .el .Ip "f(CWboundsfR" 5
  983. .IX Item "bounds"
  984. &f(CW*(C`GD::Polygon::bounds*(C'fR fIobject methodfR
  985. .Sp
  986. Return the smallest rectangle that completely encloses the polygon.
  987. The return value is an array containing the (left,top,right,bottom) of
  988. the rectangle.
  989. .Sp
  990. .Vb 1
  991. &        ($left,$top,$right,$bottom) = $poly->bounds;
  992. .Ve
  993. .if n .Ip "f(CW""""offset""""fR" 5
  994. .el .Ip "f(CWoffsetfR" 5
  995. .IX Item "offset"
  996. &f(CW*(C`GD::Polygon::offset(dx,dy)*(C'fR fIobject methodfR
  997. .Sp
  998. Offset all the vertices of the polygon by the specified horizontal
  999. (dh) and vertical (dy) amounts.  Positive numbers move the polygon
  1000. down and to the right.
  1001. .Sp
  1002. .Vb 1
  1003. &        $poly->offset(10,30);
  1004. .Ve
  1005. .if n .Ip "f(CW""""map""""fR" 5
  1006. .el .Ip "f(CWmapfR" 5
  1007. .IX Item "map"
  1008. &f(CW*(C`GD::Polygon::map(srcL,srcT,srcR,srcB,destL,dstT,dstR,dstB)*(C'fR fIobject methodfR
  1009. .Sp
  1010. Map the polygon from a source rectangle to an equivalent position in a
  1011. destination rectangle, moving it and resizing it as necessary.  See
  1012. polys.pl for an example of how this works.  Both the source and
  1013. destination rectangles are given in (left,top,right,bottom)
  1014. coordinates.  For convenience, you can use the polygon's own bounding
  1015. box as the source rectangle.
  1016. .Sp
  1017. .Vb 2
  1018. &        # Make the polygon really tall
  1019. &        $poly->map($poly->bounds,0,0,50,200);
  1020. .Ve
  1021. .if n .Ip "f(CW""""scale""""fR" 5
  1022. .el .Ip "f(CWscalefR" 5
  1023. .IX Item "scale"
  1024. &f(CW*(C`GD::Polygon::scale(sx,sy)*(C'fR fIobject methodfR
  1025. .Sp
  1026. Scale each vertex of the polygon by the X and Y factors indicated by
  1027. sx and sy.  For example scale(2,2) will make the polygon twice as
  1028. large.  For best results, move the center of the polygon to position
  1029. (0,0) before you scale, then move it back to its previous position.
  1030. .if n .Ip "f(CW""""transform""""fR" 5
  1031. .el .Ip "f(CWtransformfR" 5
  1032. .IX Item "transform"
  1033. &f(CW*(C`GD::Polygon::transform(sx,rx,sy,ry,tx,ty)*(C'fR fIobject methodfR
  1034. .Sp
  1035. Run each vertex of the polygon through a transformation matrix, where
  1036. sx and sy are the X and Y scaling factors, rx and ry are the X and Y
  1037. rotation factors, and tx and ty are X and Y offsets.  See the Adobe
  1038. PostScript Reference, page 154 for a full explanation, or experiment.
  1039. .Sh "Font Utilities"
  1040. .IX Subsection "Font Utilities"
  1041. Gd's support for fonts is minimal.  Basically you have access to
  1042. gdSmallFont and gdLargeFont for drawing, and not much else.  However,
  1043. for future compatibility, I've made the fonts into perl objects of
  1044. type s-1GD:s0:Font that you can query and, perhaps someday manipulate.
  1045. .if n .Ip "f(CW""""gdSmallFont""""fR" 5
  1046. .el .Ip "f(CWgdSmallFontfR" 5
  1047. .IX Item "gdSmallFont"
  1048. &f(CW*(C`GD::Font::gdSmallFont*(C'fR fIconstantfR
  1049. .Sp
  1050. This is the basic small font, *(L"borrowed*(R" from a well known public
  1051. domain 6x12 font.
  1052. .if n .Ip "f(CW""""gdLargeFont""""fR" 5
  1053. .el .Ip "f(CWgdLargeFontfR" 5
  1054. .IX Item "gdLargeFont"
  1055. &f(CW*(C`GD::Font::gdLargeFont*(C'fR fIconstantfR
  1056. .Sp
  1057. This is the basic large font, *(L"borrowed*(R" from a well known public
  1058. domain 8x16 font.
  1059. .if n .Ip "f(CW""""gdMediumBoldFont""""fR" 5
  1060. .el .Ip "f(CWgdMediumBoldFontfR" 5
  1061. .IX Item "gdMediumBoldFont"
  1062. &f(CW*(C`GD::Font::gdMediumBoldFont*(C'fR fIconstantfR
  1063. .Sp
  1064. This is a bold font intermediate in size between the small and large
  1065. fonts, borrowed from a public domain 7x13 font;
  1066. .if n .Ip "f(CW""""gdTinyFont""""fR" 5
  1067. .el .Ip "f(CWgdTinyFontfR" 5
  1068. .IX Item "gdTinyFont"
  1069. &f(CW*(C`GD::Font::gdTinyFont*(C'fR fIconstantfR
  1070. .Sp
  1071. This is a tiny, almost unreadable font, 5x8 pixels wide.
  1072. .if n .Ip "f(CW""""nchars""""fR" 5
  1073. .el .Ip "f(CWncharsfR" 5
  1074. .IX Item "nchars"
  1075. &f(CW*(C`GD::Font::nchars*(C'fR fIobject methodfR
  1076. .Sp
  1077. This returns the number of characters in the font.
  1078. .Sp
  1079. .Vb 1
  1080. &        print "The large font contains ",gdLargeFont->nchars," charactersen";
  1081. .Ve
  1082. .if n .Ip "f(CW""""offset""""fR" 5
  1083. .el .Ip "f(CWoffsetfR" 5
  1084. .IX Item "offset"
  1085. &f(CW*(C`GD::Font::offset*(C'fR  fIobject methodfR
  1086. .Sp
  1087. This returns the s-1ASCIIs0 value of the first character in the font
  1088. .if n .Ip "f(CW""""width""""fR" 5
  1089. .el .Ip "f(CWwidthfR" 5
  1090. .IX Item "width"
  1091. .PD 0
  1092. .if n .Ip "f(CW""""height""""fR" 5
  1093. .el .Ip "f(CWheightfR" 5
  1094. .IX Item "height"
  1095. .PD
  1096. &f(CW*(C`GD::Font::width*(C'fR f(CW*(C`GD::Font::height*(C'fR fIobject methodsfR
  1097. .Sp
  1098. These return the width and height of the font.
  1099. .Sp
  1100. .Vb 1
  1101. &        ($w,$h) = (gdLargeFont->width,gdLargeFont->height);
  1102. .Ve
  1103. .SH "Obtaining the C-language version of gd"
  1104. .IX Header "Obtaining the C-language version of gd"
  1105. libgd, the C-language version of gd, can be obtained at s-1URLs0
  1106. http://www.boutell.com/gd/gd.html.  Directions for installing and
  1107. using it can be found at that site.  Please do not contact me for help
  1108. with libgd.
  1109. .SH "Copyright Information"
  1110. .IX Header "Copyright Information"
  1111. The s-1GDs0.pm interface is copyright 1995, Lincoln D. Stein.  You are free
  1112. to use it for any purpose, commercial or noncommercial, provided that
  1113. if you redistribute the source code this statement of copyright
  1114. remains attached. The gd library is covered separately under a 1994
  1115. copyright by Quest Protein Database Center, Cold Spring Harbor Labs
  1116. and Thomas Boutell.  For usage information see the gd documentation at
  1117. &s-1URLs0
  1118. .PP
  1119. .Vb 1
  1120. &        http://www.boutell.com/gd/gd.html
  1121. .Ve
  1122. The latest versions of s-1GDs0.pm are available at
  1123. .PP
  1124. .Vb 2
  1125. &  http://www.genome.wi.mit.edu/ftp/pub/software/WWW/GD.html
  1126. &  ftp://ftp-genome.wi.mit.edu/pub/software/WWW/GD.pm.tar.gz
  1127. .Ve