note 36667 added to function.imageline

From: Date: Sat, 18 Oct 2003 03:56:06 +0000
Subject: note 36667 added to function.imageline
Groups: php.notes 
Request: Send a blank email to php-notes+get-58783@lists.php.net to get a copy of this message
# antialiased draw_line function 1.1 (faster) # here is a drawLine() posted by nanobot at chipx86 dot com # on php.net and enhanced/optimized by myself :) # here are some changes i made: # 1. changed for true-color images (no index_var used) # 2. changed rgb extraction to logical shift # 3. reducing function call's function drawQSLine ($image,$x1,$y1,$x2,$y2,$r,$g,$b) { $icr=$r; $icg=$g; $icb=$b; $dcol = ImageColorAllocate ($image,$icr,$icg,$icb); if ($y1 == $y2) imageline ($image,$x1,$y1,$x2,$y1,$dcol); else if ($x1 == $x2) { imageline ($image,$x1,$y1,$x1,$y2,$dcol); } else { $m = ($y2 - $y1) / ($x2 - $x1); $b = $y1 - $m * $x1; if (abs ($m) <2) { $x = min ($x1,$x2); $endx = max ($x1,$x2)+1; while ($x < $endx) { $y=$m * $x + $b; $y == floor ($y) ? $ya = 1 : $ya = $y - floor ($y); $yb = ceil ($y) - $y; $trgb = ImageColorAt($image,$x,floor($y)); $tcr = ($trgb >> 16) & 0xFF; $tcg = ($trgb >> 8) & 0xFF; $tcb = $trgb & 0xFF; imagesetpixel ($image,$x,floor ($y),imagecolorallocate ($image,($tcr * $ya + $icr * $yb), ($tcg * $ya + $icg * $yb), ($tcb * $ya + $icb * $yb))); $trgb = ImageColorAt($image,$x,ceil($y)); $tcr = ($trgb >> 16) & 0xFF; $tcg = ($trgb >> 8) & 0xFF; $tcb = $trgb & 0xFF; imagesetpixel ($image,$x,ceil ($y),imagecolorallocate ($image,($tcr * $yb + $icr * $ya), ($tcg * $yb + $icg * $ya), ($tcb * $yb + $icb * $ya))); $x ++; } # while_x_end } # if_end else { # else_abs_end $y = min ($y1,$y2); $endy = max ($y1,$y2)+1; while ($y < $endy) { $x=($y - $b) / $m; $x == floor ($x) ? $xa = 1 : $xa = $x - floor ($x); $xb = ceil ($x) - $x; $trgb = ImageColorAt($image,floor($x),$y); $tcr = ($trgb >> 16) & 0xFF; $tcg = ($trgb >> 8) & 0xFF; $tcb = $trgb & 0xFF; imagesetpixel ($image,floor ($x),$y,imagecolorallocate ($image,($tcr * $xa + $icr * $xb), ($tcg * $xa + $icg * $xb), ($tcb * $xa + $icb * $xb))); $trgb = ImageColorAt($image,ceil($x),$y); $tcr = ($trgb >> 16) & 0xFF; $tcg = ($trgb >> 8) & 0xFF; $tcb = $trgb & 0xFF; imagesetpixel ($image,ceil ($x),$y,imagecolorallocate ($image, ($tcr * $xb + $icr * $xa), ($tcg * $xb + $icg * $xa), ($tcb * $xb + $icb * $xa))); $y ++; }# while_y_end }# else_abs_end }# else_y=y_x=x_end }# drawOSLine_end ---- Manual Page -- http://www.php.net/manual/en/function.imageline.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+36667 Delete -- http://master.php.net/manage/user-notes.php?action=delete+36667&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+36667&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#58783) next »