Преобразование c в php - PullRequest
       6

Преобразование c в php

0 голосов
/ 24 февраля 2012

Привет, у меня есть следующий код для работы CLI, сделанный на 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)  );

        }
    }
}

Часть, с которой я застрял, - это pixel.red << 16, где я не могу получить правильные цвета из изображения и правильно преобразовать их с помощью PHP.Вот код PHP на данный момент: </p>

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));
        }
    }
}

1 Ответ

0 голосов
/ 24 февраля 2012

Я не уверен, что деление значения RGB на 256 дает желаемый эффект.

Попытка:

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

Я не уверен, пытаетесь ли вы применить какой-либо алгоритм цвета, но деление значений RGB на 256 и последующее смещение влево с плавающей точкой дает вам 0 в PHP.

Приведенная выше строка кода просто возвращает пиксель к тому же цвету.

...