2011-01-30 3 views
4

イメージGDライブラリを使用して、XORフィルタを使用して線を描画しようとしています。私はこれを行う簡単な方法を見つけることができませんでしたので、描かれている線が白と黒とに分かれています。どんな解決策ですか?imagelineとXORを使用するPHP

+0

XORフィルターが何であるか説明してください –

+1

@マーク - 描画したいキャンバス上の点の色にペンの色をコピーするのではなく、その色でXORしてそこに結果を入れます。あなたが何かを描く前に同じことを2回行うと、あなたがそこにいたキャンバスに同じ色が得られます。 –

答えて

1

imageline PHP関数が組み込まれたXORラインを描画することはできません。あなたはimagesetpixelとカスタムライン描画アルゴリズムでそれを描くことができます。例えば、このようなものは、(PHPのためのブレゼンハムラインAlgorythm)を操作できます。

function line($im,$x1,$y1,$x2,$y2) { 

$deltax=abs($x2-$x1); 
$deltay=abs($y2-$y1); 

if ($deltax>$deltay) { 
$numpixels=$deltax+1; 
$d=(2*$deltay)-$deltax; 
$dinc1=$deltay << 1; $dinc2=($deltay-$deltax) << 1; 
$xinc1=1; $xinc2=1; 
$yinc1=0; $yinc2=1; 
} else { 
$numpixels=$deltay+1; 
$d=(2*$deltax)-$deltay; 
$dinc1=$deltax << 1; $dinc2=($deltax-$deltay)<<1; 
$xinc1=0; $xinc2=1; 
$yinc1=1; $yinc2=1; 
} 

if ($x1>$x2) { 
$xinc1=-$xinc1; 
$xinc2=-$xinc2; 
} 

if ($y1>$y2) { 
$yinc1=-$yinc1; 
$yinc2=-$yinc2; 
} 
$x=$x1; 
$y=$y1; 

for ($i=0;$i<$numpixels;$i++) { 

$color_current = imagecolorat ($im, $x, $y); 
$r = ($color_current >> 16) & 0xFF; 
$g = ($color_current >> 8) & 0xFF; 
$b = $color_current & 0xFF; 
$color = imagecolorallocate($im, 255 - $r, 255 - $g, 255 - $b); 

imagesetpixel($im,$x,$y,$color); 

if ($d<0) { 
    $d+=$dinc1; 
    $x+=$xinc1; 
    $y+=$yinc1; 
} else { 
    $d+=$dinc2; 
    $x+=$xinc2; 
    $y+=$yinc2; 
} 
} 
    return ; 
} 

機能が完全にファイルから作成されたイメージのために動作します。

+0

私は自分自身でその解決策を発見しました。それはちょうど遅れています。誰かがより迅速な解決策を知っていることを期待していました。 (イメージラインを使用して) –

関連する問題