История изменений
Исправление 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]);
}
}
}
как это эффективно сделать без адресной арифметики и алиасинга?