Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование игр, графики и искусственного интеллекта > прозрачность и фильтры


Автор: powerfox 16.12.2005, 16:49
В SDL усть ф-я set Alpha, которая устанавливает прозрачность поверхности. Мне нужно, чтобы одна и таже картинка меняла свой цвет(сиреневая, синяя).Можно накладывать полупрозрачные "маски", но здесь возникает вопрос, а почему бы промто тогда не менять картинку, а это неинтересно. Может менять значение RGB картинки на равые int?
Заранее благодарю за любую помощь.

Автор: Гость_Юрий 17.12.2005, 15:18
да, можно менять определённый один цвет на другой во всей картинки - по пиксельно!

Автор: powerfox 17.12.2005, 19:58
Я пока не нашел ф-ю досьупа к пикселам(но и времени не было)

Автор: Mayk 17.12.2005, 20:04
Цитата(powerfox @ 17.12.2005, 23:58)
Я пока не нашел ф-ю досьупа к пикселам(но и времени не было)

Попиксельное обращение есть в примерах к SDL. Поgrepай putpixel.
Добавлено @ 20:06
Цитата
да, можно менять определённый один цвет на другой во всей картинки - по пиксельно!

Кстати, а если использовать 8 бит на surface и SDL_SetPalette, то тогда смена вообще в лёт произойдет smile

Автор: powerfox 17.12.2005, 20:33
Цитата(Mayk @ 17.12.2005, 20:04)
Кстати, а если использовать 8 бит на surface и SDL_SetPalette, то тогда смена вообще в лёт произойдет smile

Это как? Ведь surface - указатель или грузить картинку в 8 битном режиме?
Добавлено @ 20:37
Нашёл документацию, спасибо.

Автор: powerfox 17.12.2005, 21:21
Втавил Palette, визуальный эффект отсутствует.
Код

SDL_RWops *rwop = SDL_RWFromFile("images/bg.png", "rb");
SDL_Surface *back = IMG_LoadPNG_RW(rwop);

SDL_Surface *image=SDL_LoadBMP("images/snake.bmp");
SDL_Surface *screen=SDL_SetVideoMode(800,600,8,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_HWPALETTE);

void initsystem()
{
    if ( SDL_Init(SDL_INIT_TIMER|SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 ){ 
        printf("Unable to init SDL: %s\n", SDL_GetError()); 
        exit(1); 
    } 
 
    atexit(SDL_Quit);
    if (!back || !image || !screen ){
        printf("error while loading images, check SnakeDir/bmp\n");
        exit(1);
    }  

    SDL_WM_SetCaption("Snake from Powerfox","Snake");
    SDL_WM_SetIcon(SDL_LoadBMP("images/icon.bmp"), NULL);
    

    if ( screen == NULL ){ 
        printf("Unable to set 800x600 video: %s\n", SDL_GetError()); 
        exit(1); 
    }

    
    SDL_Color colors[256];
    int i;
    /* Fill colors with color information */
for(i=0;i<256;i++){
  colors[i].r=i;
  colors[i].g=i;
  colors[i].b=i;
}
    
    
    DrawBG();
    DrawIMG(image, 180, 0);
    DrawIMG(image, 120, 0);
    DrawIMG(image, 60, 0);
    SDL_SetPalette(image, SDL_LOGPAL|SDL_PHYSPAL, colors, 0, 256);
    SDL_Flip(screen);
    makefood();
    initsound();
    //image->format=".bmp";
    int r = 249;
    int g=0;
    int b=0;
    SDL_SetColorKey(image, SDL_SRCCOLORKEY, SDL_MapRGB(image->format,r,g,b));
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)