3

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));

...
}
4

1 に答える 1

3

関数imagecolorallocateは、呼び出すたびに画像のカラーテーブルに色を追加します。このカラーテーブルには255色の制限があります。

あなたがしたいのは、すべての文字をループする前に色への参照を作成することです。事実上、文字ごとに1つの色参照のみを作成します。

したがって、画像を作成した直後にさまざまな色に参照を割り当て、新しい色を割り当てるのではなく、これらの参照を直接呼び出します。

...
$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);

    ...
}
于 2012-09-03T12:58:07.327 に答える