2012-02-24 4 views
0

こんにちは私は、CLIでC言語で作業する次のコードを持っています。私は今、PHPで翻訳したいですが、私は色変換に固執しています。すべての手がかりは?cをphpに変換する

for (size_t y = 0; y < targetHeight; y++) { 
    for (size_t x = 0; x < targetWidth; x++) { 
     // Convertimos el color 

     png::rgba_pixel_16 pixel = renderImage[y][x]; 

     uint alpha = pixel.alpha/256; 

     if (alpha > 0) { 

      minX = minX < x ? minX : x; 
      maxX = maxX > x ? maxX : x; 
      minY = minY < y ? minY : y; 
      maxY = maxY > y ? maxY : y; 

      jpgImage->setPixel(x, y, (pixel.red/256 << 16) + (pixel.green/256 << 8) + pixel.blue/256) ; 

      uint mP = mapImage->pixel(x, y); 

      mapImage->setPixel(x, y, mP + (alpha<<16) ); 

     } 
    } 
} 

一部で立ち往生していますが、私は、画像から右の色を取得し、PHPを使用してそれらを適切に変換することはできませんpixel.red < < 16のもの、です。

はここで、これまでにPHPコードです:

for ($y = 0; $y < HEIGHT; $y++) { 
    for ($x = 0; $x < WIDTH; $x++) { 
     // Convertimos el color 

     $pixel = imagecolorat($render_img, $x, $y); 
     //$pixel = imagecolorat($render_img, $y, $x); 

     $rgba = imagecolorsforindex($render_img, $pixel); 
     $currentAlpha = $rgba['alpha']/256; 
     //$alpha = pixel.alpha/256; 

     if ($currentAlpha > 0) { 

      $minX = $minX < $x ? $minX : $x; 
      $maxX = $maxX > $x ? $maxX : $x; 
      $minY = $minY < $y ? $minY : $y; 
      $maxY = $maxY > $y ? $maxY : $y; 

      imagesetpixel ($result_jpg_image, $x, $y, ($rgba['red']/256<<16) + ($rgba['green']/256<<8) + ($rgba['blue']/256)); 
      //imagesetpixel ($result_jpg_image, $x, $y, ($rgba['red'] << 16) + ($rgba['green'] << 8) + ($rgba['blue'])); 
      //jpgImage->setPixel(x, y, (pixel.red/256 << 16) + (pixel.green/256 << 8) + pixel.blue/256) ; 

      $pixel = imagecolorat($zMap, $x, $y); 
      imagesetpixel ($zMap, $x, $y, ($pixel + $currentAlpha<<16)); 
     } 
    } 
} 
+0

開始したPHPコードを表示してください。 – Brad

+0

は、赤のバイトを16ビット左にシフトします。色を0xRRGGBBで与えられた16進数と考え、各hexgitが4ビットであると考えると、それが何をしているのかを見ることができます。 PHPはビットシフトをサポートしています。問題はどこですか? – mpen

+0

PHPコードを追加しました! – arieltools

答えて

0

私はあなたに所望の効果を与えている256でRGB値を割ることはよく分かりません。

試してみてください。

imagesetpixel($result_jpg_image, $x, $y, 
       ($rgba['red']<<16) + ($rgba['green']<<8) + ($rgba['blue'])); 

私はあなたには、いくつかの色のアルゴリズムを適用しようとしているが、256でRGB値を分割して、その結果フロートがPHPであなたに0を与えている左シフトしているかはわかりません。

上記のコード行では、ピクセルを同じ色に戻すように設定しました。

+0

残念ながら、それはうまくいきませんでした、私は同じ結果を得る。私はちょうどその除算を含むCコードをコピーしたので、256除算があります。 – arieltools

+0

'HEIGHT'と' WIDTH'は実際に正しく設定されていますか? '$ zMap'についてはどうでしょうか?私はちょうど[imagesetpixel()](http://php.net/imagesetpixel)の呼び出しも間違っていることに気付きました。 4番目のパラメータは、[imagecolorallocate()](http://php.net/imagecolorallocate)によって作成されたカラーリソースです。 – drew010

+0

HEIGHTとWIDTHは定数です。はい、画像と一致するように設定されています。 4番目のパラメータはカラーリソースです。つまり、ピクセルです。エラーはどこで確認できますか? – arieltools

関連する問題