ch29.htm

来自「《Perl 5 Unreleased》」· HTM 代码 · 共 1,295 行 · 第 1/4 页

HTM
1,295
字号
items in $y<BR>

107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return undef if ($ct1 !=

$ct2) ;<BR>

108<BR>

109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ($i=0;$i&lt;$ct1;$i++)

{<BR>

110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sum += $$x[$i] * $$y[$i];

<BR>

111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>

112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $sum;<BR>

113 }<BR>

114<BR>

115 # ------------------------------------------------------------

<BR>

116 # Returns an array that is the cross product of two vectors.

<BR>

117 # ------------------------------------------------------------

<BR>

118 sub xProduct {&nbsp;&nbsp;# (\@\@); Declare as taking two

pointers to arrays<BR>

119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ($x,$y) = @_;<BR>

120&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my @array;<BR>

121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $result = \@array;<BR>

122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $i, $j;<BR>

123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $ct1 = $#{$x} + 1;&nbsp;&nbsp;&nbsp;#

items in $x<BR>

124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $ct2 = $#{$y} + 1;&nbsp;&nbsp;&nbsp;#

items in $y<BR>

125<BR>

126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ($i=0;$i&lt;$ct1;$i++)

{<BR>

127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for

($j=0;$j&lt;$ct2;$j++) {<BR>

128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$$result[$i][$j]

= $$x[$i] * $$y[$i];<BR>

129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#

print &quot; $i, $j, $$result[$i][$j] \n&quot;;<BR>

130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

<BR>

131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>

132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return @array;<BR>

133 }</FONT></TT>

</BLOCKQUOTE>

<HR>

<H2><A NAME="UsingMatrices"><B><FONT SIZE=5 COLOR=#FF0000>Using

Matrices</FONT></B></A></H2>

<P>

Just like with vectors, you can use Perl references on matrices.

As an example of developing code for a prototype, this section

covers the following items:

<UL>

<LI><FONT COLOR=#000000>Reading an ASCII PBM file</FONT>

<LI><FONT COLOR=#000000>Collecting histogram information to show

work with matrices in Perl</FONT>

<LI><FONT COLOR=#000000>Applying a 3</FONT><FONT FACE="Symbol">&#165;</FONT>3

convolution smoothing filter on the image

<LI><FONT COLOR=#000000>Writing a resulting ASCII PBM file</FONT>

</UL>

<P>

This section covers the image shown in Figure 29.1. The image

is a black-and-white cartoon, but the techniques you'll learn

here can be applied to color images as well. Listing 29.5 contains

the complete code for developing the images shown in Figures 29.2

and 29.3.

<P>

<A HREF="f29-1.gif" tppabs="http://www.mcp.com/815097600/0-672/0-672-30891-6/f29-1.gif" ><B>Figure 29.1 : </B><I>The unfiltered image.</I></A>

<HR>

<BLOCKQUOTE>

<B>Listing 29.5. The complete listing for reading and writing

PBM files.<BR>

</B>

</BLOCKQUOTE>

<BLOCKQUOTE>

<TT><FONT FACE="Courier">&nbsp;&nbsp;1 #!/usr/bin/perl<BR>

&nbsp;&nbsp;2<BR>

&nbsp;&nbsp;3 #-------------------------------------------------------

<BR>

&nbsp;&nbsp;4 #&nbsp;&nbsp;&nbsp;&nbsp;Read and write ASCII PPM

files<BR>

&nbsp;&nbsp;5 #-------------------------------------------------------

<BR>

&nbsp;&nbsp;6 # Author: Kamran Husain&nbsp;&nbsp;4.4.96<BR>

&nbsp;&nbsp;7 # NO WARRANTIES WHATSOEVER APPLY HERE!! Copy freely,

use<BR>

&nbsp;&nbsp;8 # at will, with no restrictions.<BR>

&nbsp;&nbsp;9 #-------------------------------------------------------

<BR>

&nbsp;10 use Getopt::Long;<BR>

&nbsp;11 GetOptions('out=s');<BR>

&nbsp;12<BR>

&nbsp;13 open (TEXT,&quot;pirate.ppm&quot;) || die &quot;\n Cannot

open $!\n&quot;;<BR>

&nbsp;14 @image = ();<BR>

&nbsp;15 @hist = ();<BR>

&nbsp;16 ($wd, $ht, @image) =&nbsp;&nbsp;&amp;readImage;<BR>

&nbsp;17 close &lt;TEXT&gt;;<BR>

&nbsp;18<BR>

&nbsp;19 print &quot;@image &quot;;<BR>

&nbsp;20 @hist = &amp;getHistogram($ht,$wd,@image);<BR>

&nbsp;21<BR>

&nbsp;22 $ctr = 0;<BR>

&nbsp;23 $hi = $#hist + 1;<BR>

&nbsp;24<BR>

&nbsp;25 # ------------------------------------------------------

<BR>

&nbsp;26 # Display histogram of image in memory<BR>

&nbsp;27 # ------------------------------------------------------

<BR>

&nbsp;28 print &quot;Histogram of image\n&quot;;<BR>

&nbsp;29 for ($i = 0; $i &lt; $hi; $i++) {<BR>

&nbsp;30 if ($hist[$i] != 0) {<BR>

&nbsp;31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf &quot;[%3d]

= %5d &quot;, $i, $hist[$i] ; $ctr++;<BR>

&nbsp;32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if

($ctr &gt;= 5) {<BR>

&nbsp;33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ctr

= 0;<BR>

&nbsp;34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print

&quot;\n&quot;<BR>

&nbsp;35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

<BR>

&nbsp;36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>

&nbsp;37 }<BR>

&nbsp;38<BR>

&nbsp;39 # ------------------------------------------------------

<BR>

&nbsp;40 #&nbsp;&nbsp;&nbsp;Write to disk as unfiltered.<BR>

&nbsp;41 # ------------------------------------------------------

<BR>

&nbsp;42 @convolve = ( 0.1, 0.1, 0.1,<BR>

&nbsp;43&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.1, 0.1,

0.1,<BR>

&nbsp;44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.1, 0.1,

0.1);<BR>

&nbsp;45 print &quot;\n Filter 1 applied&quot;;<BR>

&nbsp;46 &amp;applyFilter3($wd,$ht,\@convolve,\@image);<BR>

&nbsp;47 &amp;dumpImage ('filt1.ppm', $wd, $ht);<BR>

&nbsp;48<BR>

&nbsp;49 @convolve = ( 0.1, 0.0, 0.1,<BR>

&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0, 0.5,

0.0,<BR>

&nbsp;51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.1, 0.0,

0.1);<BR>

&nbsp;52 print &quot;\n Filter 2 applied&quot;;<BR>

&nbsp;53 &amp;applyFilter3($wd,$ht,\@convolve,\@image);<BR>

&nbsp;54<BR>

&nbsp;55 &amp;dumpImage ('filt2.ppm', $wd, $ht);<BR>

&nbsp;56<BR>

&nbsp;57 exit(0);<BR>

&nbsp;58<BR>

&nbsp;59 # ------------------------------------------------------

<BR>

&nbsp;60 #&nbsp;&nbsp;&nbsp;&nbsp;Dump PPM file to disk given

file name,<BR>

&nbsp;61 #&nbsp;&nbsp;&nbsp;&nbsp;ht and width of image<BR>

&nbsp;62 # ------------------------------------------------------

<BR>

&nbsp;63 sub dumpImage {<BR>

&nbsp;64<BR>

&nbsp;65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $fname = shift

@_;<BR>

&nbsp;66&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $wd = shift @_;

<BR>

&nbsp;67&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $ht = shift @_;

<BR>

&nbsp;68&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $i,$j,$k,$v;<BR>

&nbsp;69<BR>

&nbsp;70 print &quot;\n Writing file $fname $wd by $ht&quot;;

<BR>

&nbsp;71<BR>

&nbsp;72 open (OUTPUT,&quot;&gt;$fname&quot;) || die &quot;Cannot

open $fname $! &quot;;<BR>

&nbsp;73 select OUTPUT;<BR>

&nbsp;74 print &quot;P3\n&quot;;<BR>

&nbsp;75 print &quot;# Test output\n&quot;;<BR>

&nbsp;76 print &quot;$wd $ht\n&quot;;<BR>

&nbsp;77 print &quot;255\n&quot;;<BR>

&nbsp;78<BR>

&nbsp;79 $count = 0;<BR>

&nbsp;80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for($i=0;$i&lt;$ht;$i++)

{<BR>

&nbsp;81&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for($j=0;$j&lt;$wd;$j++)

{<BR>

&nbsp;82&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$v

= $$image[$i][$j];<BR>

&nbsp;83&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf

&quot;%3d %3d %3d &quot;, $v,$v,$v;<BR>

&nbsp;84&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$count++;

<BR>

&nbsp;85&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if

(($count % 5) == 0) {<BR>

&nbsp;86&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$count

= 0;<BR>

&nbsp;87&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print

&quot;\n&quot;;}<BR>

&nbsp;88&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

<BR>

&nbsp;89&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>

&nbsp;90 close OUTPUT;<BR>

&nbsp;91 select STDOUT;<BR>

&nbsp;92 }<BR>

&nbsp;93<BR>

&nbsp;94<BR>

&nbsp;95 # ------------------------------------------------------

<BR>

&nbsp;96 #&nbsp;&nbsp;&nbsp;&nbsp;Read PPM file from disk given

file name,<BR>

&nbsp;97 #&nbsp;&nbsp;&nbsp;&nbsp;Return b/w version back along

with ht and width of<BR>

&nbsp;98 #&nbsp;&nbsp;&nbsp;&nbsp;image.<BR>

&nbsp;99 # ------------------------------------------------------

<BR>

100 sub readImage { # (\@) for image data;<BR>

101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my @image;<BR>

102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $result = \@image;<BR>

103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $format = &lt;TEXT&gt;;

<BR>

104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $comment = &lt;TEXT&gt;;

<BR>

105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$a = &lt;TEXT&gt;;<BR>

106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chop $a;<BR>

107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local ($cols, $rows) =

split(' ',$a);<BR>

108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local $colors = &lt;TEXT&gt;;

<BR>

109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $row = 0;<BR>

110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $col = 0;<BR>

111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $a;<BR>

112<BR>

113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$rows = int($rows);<BR>

114&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cols = int($cols);<BR>

115<BR>

116&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ($a = &lt;TEXT&gt;)

{<BR>

117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chop $a;<BR>

118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@words = split(' ',$a);

<BR>

119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$count = $#words;<BR>

120<BR>

121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (@words) {<BR>

122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;($r,$g,$b)

= splice(@words,0,3);<BR>

123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$$image[$row][$col]

= ($r+$g+$b)/3;<BR>

124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$col++;

<BR>

125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($col

&gt;= $cols) { $row++; $col = 0 }<BR>

126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>

127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>

128&nbsp;&nbsp;&nbsp;&nbsp;return ($cols,$rows,@image);<BR>

129&nbsp;&nbsp;&nbsp;&nbsp;}<BR>

130<BR>

131<BR>

132 # ------------------------------------------------------<BR>

133 #&nbsp;&nbsp;&nbsp;&nbsp;Calculate histogram of up to 256

colors in<BR>

134 #&nbsp;&nbsp;&nbsp;&nbsp;the passed image bytes.<BR>

135 # ------------------------------------------------------<BR>

136 sub getHistogram {<BR>

137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ($rows,$cols,$img) =

@_;<BR>

138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my @image = @$img;<BR>

139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my @refered = ();<BR>

140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $hst = \@refered;<BR>

141<BR>

142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $i,$j,$k;<BR>

143<BR>

144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for($i=0;$i&lt;$rows;$i++)

{<BR>

145&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

for($j=0;$j&lt;$cols;$j++) {<BR>

146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$k

= $$image[$i][$j];<BR>

147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$$hst[$k]

+= 1;<BR>

148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

<BR>

149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>

150&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (@refered);<BR>

151 }<BR>

152<BR>

153<BR>

154 # ------------------------------------------------------<BR>

155 #&nbsp;&nbsp;&nbsp;&nbsp;Apply 3x3 filter to the image<BR>

156 #&nbsp;&nbsp;&nbsp;&nbsp;Return resulting image.<BR>

157 # ------------------------------------------------------<BR>

158 sub applyFilter3 {<BR>

159&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ($rows,$cols,$convolve,$img)

= @_;<BR>

160&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my @fir = @$convolve;<BR>

161&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my @image = @$img;<BR>

162&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $i,$j,$k,$v;<BR>

163<BR>

164&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;\n

Filter: $rows X $cols &quot;;<BR>

165&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ($i=0; $i&lt;9;$i++)

{<BR>

166&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;&nbsp;&nbsp;&nbsp;&quot;\[

$fir[$i] \]&quot;;<BR>

167&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>

168&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for($i=1;$i&lt;$rows -1;$i++)

{<BR>

169&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for($j=1;$j&lt;$cols

- 1;$j++) {<BR>

170&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$k

=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$$image[$i-1][$j-1] * $fir[0] +

<BR>

171&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$$image[$i][$j-1]&nbsp;&nbsp;&nbsp;*

$fir[1] +<BR>

172&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$$image[$i+1][$j-1]

* $fir[2] +<BR>

173&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$$image[$i-1][$j]&nbsp;&nbsp;&nbsp;*

$fir[3] +<BR>

174&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$$image[$i][$j]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*

$fir[4] +<BR>

175&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$$image[$i+1][$j]&nbsp;&nbsp;&nbsp;*

$fir[5] +<BR>

176&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$$image[$i-1][$j+1]&nbsp;*

$fir[6] +<BR>

177&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$$image[$i][$j+1]&nbsp;&nbsp;&nbsp;*

$fir[7] +<BR>

178&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$$image[$i+1][$j+1]

* $fir[8];<BR>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?