lock&_lock Ответов: 2

Обработка изображений с помощью C++ и opengl, попытка понять код


Я изучаю обработку изображений с использованием C++ и OpenGL.
Я столкнулся с этой частью,

int main(int argc, char *argv[])
{
  unsigned char* image; 
    image = SOIL_load_image("Images/image.png", &width, &height, 0, SOIL_LOAD_RGBA);
    if(image == NULL) exit(0); //if loaded image fail
  }

static void createImages(void)
{
    unsigned char *p;

    p = image;
    for(int i = 0; i < height*width; i++) {     
        if(*p == 0 && *(p+1) == 0) { //(p+1)==0-->Green pixel =0, what is *p==0 ?
         //some commands to replace pixels value
     {...

}
что означает *p == 0 в состоянии ? проверка указателя на изображение как 0 ?
Означает ли это проверку загрузки изображения ?

Что я уже пробовал:

Я понимаю остальную часть полного кода, за исключением части *p==0.

2 Ответов

Рейтинг:
2

KarstenK

Проверка нагрузки-это ваше дело.

if(image == NULL) exit(0); //if loaded image fail
Ваш код проверяет, является ли память, на которую указывают p и p+1, равной 0. Это два байта, так что это 16-битное значение или слово. Обычно это делается для того, чтобы интерпретировать память на некоторую информацию формата. Это зависит от формата данных вашего изображения. Для этого вы должны прочитать технические характеристики детали SOIL_load_image.

Такой шаблон кода часто используется для идентификации некоторых областей цвета и манипулирования им.

Отсутствует какой-то важный код, который касается изменения p.


Рейтинг:
13

Jochen Arndt

В вашем примере * это Оператор разыменования - Википедия[^]. Потому что p иметь тип unsigned char * он получит доступ к unsigned char на который p указывающий. Это похоже на использование p[0] и *(p+1) аналогично p[1].


lock&amp;_lock

Спасибо! Я понимаю часть указателя, если p указывает на другую память.
I также undertsand (p+1) аналогичен p[1] в этом случае является зеленым пикселем.
Я просто не понимаю часть условия, что это за проверка условий ?
условие if(*p == 0 && *(p+1) == 0) состоит в том, чтобы проверить, равно ли значение зеленого пикселя (p+1) 0 и *p==0, что это такое *p==0 ?

lock&amp;_lock

Ох, как я виноват. Теперь я понял. Большое спасибо !