Kita bisa mengubah kecerahan warna berdasarkan nilai R, G dan B
yang dimiliki suatu warna dalam gambar yang akan kita tampilkan. Untuk
mengubah warna dari texture, kita bisa menggunakan
SDL_SetTextureColorMod. Jika kita menggunakan surface, yang kita gunakan
adalah SDL_SetSurfaceColorMod.
- int SDL_SetSurfaceColorMod (SDL_Surface* surface, Uint8 r, Uint8 g, Uint8 b);
- int SDL_SetTextureColorMod (SDL_Texture* texture, Uint8 r, Uint8 g, Uint8 b);
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
int main(int argc, char* args[]){
SDL_Window* window = NULL;
SDL_Event evt;
if( SDL_Init( SDL_INIT_VIDEO ) < 0 && IMG_Init(IMG_INIT_JPG|IMG_INIT_PNG)){
printf( "Error: %s\n", SDL_GetError() );
}else{
window = SDL_CreateWindow( "SDLku", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN );
if( window == NULL ){
printf( "Error : %s", SDL_GetError() );
}else{
SDL_Renderer *trender = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
SDL_Surface *tmp=IMG_Load("Codelogi.png");
if(tmp){
int panjang=tmp->w;
int tinggi=tmp->h;
SDL_Texture *bmp=SDL_CreateTextureFromSurface(trender, tmp);
SDL_FreeSurface(tmp);
if(bmp){
SDL_Rect rct;
while(evt.type!=SDL_QUIT){
while(SDL_PollEvent(&evt)){
if(evt.type==SDL_KEYDOWN){
switch(evt.key.keysym.sym){
case SDLK_q:
SDL_SetTextureColorMod(bmp, 255, 128, 255);
break;
case SDLK_w:
SDL_SetTextureColorMod(bmp, 255, 255, 128);
break;
case SDLK_e:
SDL_SetTextureColorMod(bmp, 128, 255, 255);
break;
case SDLK_r:
SDL_SetTextureColorMod(bmp, 128, 128, 128);
break;
case SDLK_a:
SDL_SetTextureColorMod(bmp, 255, 128, 128);
break;
case SDLK_s:
SDL_SetTextureColorMod(bmp, 128, 255, 128);
break;
case SDLK_d:
SDL_SetTextureColorMod(bmp, 128, 128, 255);
break;
default:
SDL_SetTextureColorMod(bmp, 255, 255, 255);
break;
}
}
}
SDL_SetRenderDrawColor(trender, 0xFF, 0xFF, 0xFF, 0xFF);
SDL_RenderClear(trender);
rct.x=0;
rct.w=0;
rct.w=panjang;
rct.h=tinggi;
SDL_RenderSetViewport(trender, &rct);
SDL_RenderCopy(trender, bmp, NULL, NULL);
SDL_RenderPresent(trender);
}
}
}
}
}
SDL_DestroyWindow( window );
SDL_Quit();
return 0;
}
Dalam
kode program di atas, saya menggunakan event keyboard. Kalian bisa
mencoba menekan tombol q, w, e, r, a, s, d, atau tombol-tombol lain
untuk melihat perubahan warna dari gambar. Jika yang kita tekan tombol
q, warna hijau tidak akan berubah karena nilai parameter ketiga yang
mewakili warna hijau adalah 255. 255 adalah nilai maksimal dari nilai R,
G, dan B. Jika kita menggunakan 128, artinya kecerahan dari suatu warna
adalah setengahnya.
Selanjutnya, coba tekan tombol lain, dan lihat warna yang tidak berubah!