Алгоритм рисования пикселей - PullRequest
1 голос
/ 06 февраля 2009

Мне нужен пример алгоритма, который будет рисовать пиксели по одному в системе на основе сетки (x, y), а также раскрашивать их на основе значения rbg на основе двоичных данных, представленных в некоторой форме. Я ищу что-нибудь написанное на php или php-подобном языке, таком как C, но в котором не используются какие-либо библиотеки или видеокарты api, так как я пишу на php.

Вот что я написал в php, в котором используются случайные значения цвета, но для рендеринга в HTML-холсте требуется 15 секунд:

<?php
$r_max = 240;
$c_max = 320;
$row = -1;//-1 to offset while
while ($row<$r_max){
    ++$row;
    for($column=0; $column<=$c_max; ++$column)
    {
    echo 'ctx.fillStyle = "rgb(', rand()%255, ',', rand()%255, ',', rand()%255, ')";';
    echo 'ctx.fillRect(', $column, ',', $row, ',1,1);';
    }
}
?>

Ответы [ 4 ]

2 голосов
/ 06 февраля 2009

Не совсем уверен, что я вполне понимаю ваш вопрос, но .. В PHP есть функции GD, которые включают в себя распределение изображений и вызовы setpixel, рисование линий и т. Д. Проверьте здесь

о, да imagemagick также для более экзотических целей

0 голосов
/ 06 февраля 2009

Я не могу использовать формат изображения, потому что он неэффективен для моего использования. Я ищу пример кода, где изображение может отображаться на основе данных, просто чтобы я мог понять, как делать то, что я делаю, со скоростью, превышающей 15 секунд на рендеринг. Вложенные циклы, которые я включил выше, очень медленные.

0 голосов
/ 06 февраля 2009

Проблема в том, что вы генерируете код для каждого пикселя. Вместо этого, почему бы не сделать так, чтобы код записывал информацию о пикселях в ваш любимый формат изображения, а затем отображал ее на странице? Это наиболее разумное (для меня) алгоритмическое решение ... Я не уверен, будет ли оно соответствовать тому, что вы пытаетесь сделать.

0 голосов
/ 06 февраля 2009

Кажется, вы пытаетесь вывести команды JavaScript для рисования на теге <canvas>. Более быстрый способ рисования пикселей может состоять в использовании moveTo и lineTo. Кстати, а почему вы тоже не используете цикл for?

не

for($row=0; $row<=$r_max; ++$row) {
    for($column=0; $column<=$c_max; ++$column) {
        # draw pixel
    }
}

кажется более естественным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...