我正在使用imagesetpixel()为字母“x”绘制灰色像素,为字母“o”绘制黑色像素。如果只输入~250或更少的X和O,它工作正常,但是如果输入的数量超过这个数,那么由于某些奇怪的原因,只有第一个~250 X和O被绘制,其余的不是。有谁知道我怎么解决这个问题?
作为旁注,将来我可能希望能够替换我选择的颜色替换其他字母,所以请记住(例如a =红色,b =蓝色,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));
...
}
答案 0 :(得分: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);
...
}