2012-09-03 123 views
3

我使用imagesetpixel()爲字母'x'繪製灰色像素,爲字母'o'繪製黑色像素。如果你只輸入大約250或更少的X和O,它會工作得很好,但如果輸入更多,出於某種奇怪的原因,只有第一個〜250個X和O被繪製,其餘的不是。有誰知道我該如何解決這個問題?PHP imagesetpixel()停止限制繪製像素〜250

作爲一個旁註,在未來,我可能希望能夠用其他字母替代我選擇的自己的顏色,所以請記住(例如a = red,b = blue,c =綠色,d =橙色等)。

... 
$image = imagecreate($xdim, $ydim); 

for(...){ 
if($string{$i} == "o"){ 
    $color = 0; 
} else if($string{$i} == "x"){ 
    $color = 170; 
} 

imagesetpixel($image, $x, $y, imagecolorallocate($image, $color, $color, $color)); 

... 
} 

回答

3

功能imagecolorallocate增加了一個顏色的圖像顏色表每次調用它的時候 - 這種顏色表中有255種顏色的限制。

想要做的是在遍歷所有字母之前創建對顏色的引用,實際上只會爲每個字母創建一個顏色引用。

只是創造你的形象所以以後分配給您的不同顏色的引用,然後,而不是直接調用分配一個新顏色的這些引用:

... 
$image = imagecreate($xdim, $ydim); 
$black = imagecolorallocate($image, 0, 0, 0); 
$grey = imagecolorallocate($image, 170, 170, 170); 

for(...){ 
    if($string{$i} == "o"){ 
     $color = $black; 
    } else if($string{$i} == "x"){ 
     $color = $grey; 
    } 

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

    ... 
} 
+0

謝謝!有一個類似的問題[這裏](http://stackoverflow.com/questions/7060728),但它讓我困惑。你的回答非常有意義,並且出色地工作! – Pamela

+0

與GD lib的其他繪圖函數(如'imagefilledellipse()'或'imageline()')存在完全相同的問題。謝謝! – Arvid

+0

@froddd:請發送完整的代碼。 – SwR