2012-09-03 80 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