簡體   English   中英

SDL2逐像素讀取PNG24

[英]SDL2 read PNG24 pixel by pixel

我有一個getpixel函數,可以在給定表面的情況下讀取給定像素的r,g,b和alpha值:

void getpixel(SDL_Surface *surface, int x, int y) {
    int bpp = surface->format->BytesPerPixel;
    Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;

    Uint8 red, green, blue, alpha;

    SDL_GetRGBA(*p, surface->format, &red, &green, &blue, &alpha);

    cout << (int)red << " " << (int)green << " " << (int)blue << " " << (int)alpha  << endl;

}

我用Phosothop“ Save for Web”保存了PNG圖像,然后選擇PNG24作為格式。 問題在於該函數僅讀取紅色值,並且始終將alpha讀取為0。我試圖強制這樣的格式:

SDL_Surface* temp  = IMG_Load(png_file_path.c_str()); 
SDL_Surface* image =  SDL_ConvertSurfaceFormat(temp, SDL_PIXELFORMAT_RGBA8888, 0);
SDL_FreeSurface(temp);

這樣,它只會讀取alpha值。 如何在SDL2中逐像素讀取PNG?

SDL_GetRGBA(*p, surface->format, &red, &green, &blue, &alpha); 嘗試從*p提取類型為Uint8 它只有一個字節,所以可以-根據像素格式,它只能是紅色或alpha。 SDL_GetRGBA預計Uint32 ,所以呼叫應該是例如SDL_GetRGBA(*(Uint32*)p, surface->format, &red, &green, &blue, &alpha);

(它僅對32bpp格式有效-否則,您應該將Surface轉換為32位,或者將memcpy BytesPerPixel數量的像素數據轉換,否則結果將不正確)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM