2012-02-24 2 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

불행히도, 그 작동하지 않았다, 나는 동일한 결과를 얻을. 256 부분은 그 부분을 포함하는 C 코드를 복사했기 때문입니다. – arieltools

+0

'HEIGHT'와'WIDTH'가 실제로 올바르게 설정되어 있습니까? 또한'$ zMap'은 어떻습니까? 나는 또한 [imagesetpixel()] (http://php.net/imagesetpixel)에 대한 호출 또한 잘못되었음을 깨달았다. 네 번째 매개 변수는 [imagecolorallocate()] (http://php.net/imagecolorallocate)에서 만든 색상 리소스입니다. – drew010

+0

HEIGHT 및 WIDTH는 상수입니다. 예, 이미지와 일치하도록 설정됩니다. 네 번째 매개 변수는 색상 리소스이므로 이미지는 픽셀입니다. 어디서 오류가 보이나요? – arieltools