LINUX.ORG.RU

История изменений

Исправление LamerOk, (текущая версия) :

я вот честно ХЗ зачем здесь пример кода на C#,

Обобщённый алгоритм в языке, где нет никакой адресной арифметики.

Ну так давайте разберем какие-то конкретные примеры.

Я выискивать из прода щас ничего не буду, возьму простейший пример даже без параметризации форматом матрицы:

struct img
{
    size_t width;
    size_t height;
    unsigned char *data; // BGR
};

extern void f(size_t x, size_t y, unsigned char r, unsigned char g, unsigned char b);

void process_bitmap(struct img &img)
{
    for(size_t y = 0; y < img.height; y++)
    {
        for(size_t x = 0; x < img.width; x++)
        {
            unsigned char *p = img.data + img.width*3*y + x*3;
            f(x, y, p[2], p[1], p[0]);
        }
    }
}

как это эффективно сделать без адресной арифметики и алиасинга?

Исходная версия LamerOk, :

я вот честно ХЗ зачем здесь пример кода на C#,

Обобщённый алгоритм в языке, где нет никакой адресной арифметики.

Ну так давайте разберем какие-то конкретные примеры.

Я выискивать из прода щас ничего не буду, возьму простейший пример даже без параметризации форматом матрицы:

struct img
{
    size_t width;
    size_t height;
    unsigned char *data; // BGR
};

extern void f(size_t x, size_t y, char r, char g, char b);

void process_bitmap(struct img &img)
{
    for(size_t y = 0; y < img.height; y++)
    {
        for(size_t x = 0; x < img.width; x++)
        {
            unsigned char *p = img.data + img.width*3*y + x*3;
            f(x, y, p[2], p[1], p[0]);
        }
    }
}

как это эффективно сделать без адресной арифметики и алиасинга?