Получение цвета пикселя

Статус
В этой теме нельзя размещать новые ответы.

mutex

Guest
Получение цвета пикселя

Динамически создаю изображение, копирую в него фрагмент из другого. После этого пытаюсь получить цвет заданного пикселя изображения с помощью ImageColorAt(). Если я правильно понял, функция возвращает мне индекс цвета в палитре. А мне нужно получить цвет именно в формате RGB (хотя-бы с помощью битовых операций). ImageColorDeallocate() не помогает. В чем моя ошибка? Код такой:
PHP:
<?
  $img =ImageCreateFromJPEG("original.jpg");
  $out = ImageCreate(16, 16);
  ImageCopy($out, $img, 0, 0, 0, 0, 16, 16);
  $rgb = ImageColorAt($out, $x, $y);
// Тут должно быть разделение на составляющие
  ImageDestroy($out);
  ImageDestroy($img);
?>
 

mutex

Guest
Правильно. Так там и написано:

imagecolorat() works differently for png's with true color and for paletted png's - for true color it returns value of color, for paletted it returns index number and you have to use imagecolorsforindex() to get rgb color value.

Я делал так:
PHP:
   $clr = ImageColorsForIndex($img, $rgb);
И все равно не проходит. Что-то я уже совсем запутался.
 

Profic

just Profic (PHP5 BetaTeam)
mutex
Что не проходит, а может не выходит? :)
Изучай этот кучок кода да просветления - может поможет, пройдёт или... :)
PHP:
$im = imagecreatefrompng("test2.png");
$imagex = imagesx ($im);
$imagey = imagesy ($im);
echo '<table width='.$imagex.' height='.$imagey.' cellpadding=0 cellspacing=0 border=0>';
for ($y = 0; $y < $imagex; $y++) {
 echo '<tr>';
 for ($x = 0; $x < $imagey; $x++) {
  $color = imagecolorat ($im, $x, $y);
  $color1 = imagecolorsforindex ($im, $color);
  printf ('<td bgcolor="#%02x%02x%02x"><img src="1x1.gif" width=1 height=1 border=0></td>', $color1['red'], $color1['green'], $color1['blue']);
 }
 echo '</tr>';
}
echo '</table>';
ПыСы. Для особо глазастых: да, этот код делает из картинки таблицу-картинку. Т.е. картинку, "нарисованную" таблицей с ячейками 1x1 px. Браузер вешается - жуть :) Тестил на картинке 64х64 пикселя :)
 

mutex

Guest
Теперь разобрался, спасибо. Только пятую строку следует писать так:
PHP:
for ($y = 0; $y < $imagey; $y++) {
Но это уже мелочи.
 

WMix

герр M:)ller
Партнер клуба
масяня Константинович, а чеё, прикольно
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху