В принципе всё работает..
Если бы не одно большое НО...
Условие задания такое, что мне нужно прочитать содержимое bmp-файла "как положено", т.е. открыть файл и, считывая побайтно, попиксельно выводить на экран изображение..
Только все графические функции в PHP работают с тройками RGB... А в BMP-файле информация по цветам хранится в каждом байте в виде индексированных значений от 0 до 255, где каждое число - это свой цвет.. Сначала вопрос стоял о конвертации "индексированное значение -> RGB-тройка".. Потом я нашёл вот такую функцию:
array imagecolorsforindex ( resource image, int index); -
Возвращает ассоциативный массив с ключами red, green и blue, содержащими соответствующие значения для специфицированного индекса цвета.Всё бы хорошо, но я столкнулся с следующей тупкой:
<?php
$im = imagecreatefromgif("Fuck.gif");
$color_index = imagecolorat($im, 80,20);
$rgb = imagecolorsforindex($im, $color_index); //даже если вместо $color_index подставить произвольное число [0..255] - всё нормально работает
...
$color = ImageColorAllocate($im, $rgb["red"], $rgb["green"],$rgb["blue"]);
...
ImagePng($im);
ImageDestroy($im);
?>
- этот код работает без проблем..
А вот этот
<?php
$im = imagecreate(400, 400); //////////////////////////////////////////////////
$str = join('', file($_GET['name']));
...
$rgb = imagecolorsforindex($im, $str[$j]);
...
$color = ImageColorAllocate($im, $rgb["red"], $rgb["green"],$rgb["blue"]);
...
ImagePng($im);
ImageDestroy($im);
?>
- ни в какую..:
Warning: imagecolorsforindex(): Color index 45 out of range in z:\home\localhost\www\my\drawing2.php on line 12
Подскажите, plz, в чём моя ошибка? Или может можно конвертацию по-другому как-нить замутить?