Belirli bir SDL_Window * ve SDL_Renderer * kullanarak, SDL 2.0'da bir ekran görüntüsünü nasıl oluşturabilir ve kaydedebilirim?Bir BMP ekran görüntüsünü SDL 2'de nasıl kaydeder ve kaydederim?
14
A
cevap
11
Aşağıda, şu anda yazdığım bir kitaplıktan alınan SDL 2 ekran görüntüsünü kaydetmek için bir işlev bulunmaktadır.
bool saveScreenshotBMP(std::string filepath, SDL_Window* SDLWindow, SDL_Renderer* SDLRenderer) {
SDL_Surface* saveSurface = NULL;
SDL_Surface* infoSurface = NULL;
infoSurface = SDL_GetWindowSurface(SDLWindow);
if (infoSurface == NULL) {
std::cerr << "Failed to create info surface from window in saveScreenshotBMP(string), SDL_GetError() - " << SDL_GetError() << "\n";
} else {
unsigned char * pixels = new (std::nothrow) unsigned char[infoSurface->w * infoSurface->h * infoSurface->format->BytesPerPixel];
if (pixels == 0) {
std::cerr << "Unable to allocate memory for screenshot pixel data buffer!\n";
return false;
} else {
if (SDL_RenderReadPixels(SDLRenderer, &infoSurface->clip_rect, infoSurface->format->format, pixels, infoSurface->w * infoSurface->format->BytesPerPixel) != 0) {
std::cerr << "Failed to read pixel data from SDL_Renderer object. SDL_GetError() - " << SDL_GetError() << "\n";
pixels = NULL;
return false;
} else {
saveSurface = SDL_CreateRGBSurfaceFrom(pixels, infoSurface->w, infoSurface->h, infoSurface->format->BitsPerPixel, infoSurface->w * infoSurface->format->BytesPerPixel, infoSurface->format->Rmask, infoSurface->format->Gmask, infoSurface->format->Bmask, infoSurface->format->Amask);
if (saveSurface == NULL) {
std::cerr << "Couldn't create SDL_Surface from renderer pixel data. SDL_GetError() - " << SDL_GetError() << "\n";
return false;
}
SDL_SaveBMP(saveSurface, filepath.c_str());
SDL_FreeSurface(saveSurface);
saveSurface = NULL;
}
delete[] pixels;
}
SDL_FreeSurface(infoSurface);
infoSurface = NULL;
}
return true;
}
Cheers! -Neil
6
SDL2 ile OpenGL kullanıyorsanız, bilgi yüzeyi ve renderer yerine doğrudan glReadPixels
'u arayabilirsiniz. İşte bir örnek (hata kontrolü olmadan).
void Screenshot(int x, int y, int w, int h, const char * filename)
{
unsigned char * pixels = new unsigned char[w*h*4]; // 4 bytes for RGBA
glReadPixels(x,y,w, h, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
SDL_Surface * surf = SDL_CreateRGBSurfaceFrom(pixels, w, h, 8*4, w*4, 0,0,0,0);
SDL_SaveBMP(surf, filename);
SDL_FreeSurface(surf);
delete [] pixels;
}
İşte penceresi ve bir OpenGL bağlamını kurma bir örnekle SDL wiki page bu.
İlgili konular
- 1. Ekran görüntüsünü belirleme Android
- 2. BMP dosyasının
- 3. Harita görüntüsünü yarat Ekran
- 4. Appium + selenium tarafından android cihaz görüntüsünü nasıl kaydederim?
- 5. Bir Kullanıcı bir ekran görüntüsünü aldığında algılar
- 6. Bir ASP.Net sayfasından ekran görüntüsünü alın
- 7. Ekran görüntüsünü yakaladıktan sonra galeri nasıl yenilenir?
- 8. Gizli masaüstü ekran görüntüsünü yakalama
- 9. Bir web sayfasının ekran görüntüsünü yakalayın ve görüntü alın (ASP.NET)
- 10. , mac osx üzerinde bir protokol kaydeder mi?
- 11. Bir png dosyasını saydamlıkla nasıl kaydederim?
- 12. Ekran görüntüsünü programla değiştirdikten sonra Brightness (Ekran Parlaklığı) Güncelleme
- 13. Spark: Bir veri çerçevesini üstbilgilerle nasıl kaydederim?
- 14. Ekran görüntüsünü tespit et Android 4.0+ +
- 15. Python ile Windows'ta ekran görüntüsünü alın?
- 16. Linux, ekran görüntüsünü yakalama ve fare hareketlerini taklit etme
- 17. BMP piksel değerlerini bir diziye nasıl okuyabilirim?
- 18. Düzenledikten sonra yakalanan ekran görüntüsünü kaydettirin
- 19. iPhone, artırılmış gerçeklik ekran görüntüsünü AVCaptureVideoPreviewLayer
- 20. Web tarayıcısı kontrolünün ekran görüntüsünü alın?
- 21. SDL sahte tam ekran modu linux altında çift monitörde kurulum
- 22. Android - Bir projenin dokümantasyonu için bir telefonun ekran görüntüsünü yakalama
- 23. Bir videonun ekran görüntüsünü oluşturmak için ffmpeg kullanarak raylar
- 24. OpenGL texture, bmp
- 25. Bir web sayfasının ekran görüntüsünü program aracılığıyla alma
- 26. Bir resmi bir URL'den nasıl indirebilirim ve bilgisayarıma nasıl kaydederim?
- 27. HTML2Canvas kullanmadan tam HTML sayfasının ekran görüntüsünü nasıl alırsınız?
- 28. GLSurfaceView'in ekran görüntüsünü Android'deki başka bir diziden almak mümkün müdür?
- 29. Yaylı önyükleyicileri, ilkbahar açılışında nasıl kaydeder?
- 30. html5/javascript kullanarak tüm ekranın bir ekran görüntüsünü alın?
'piksel = NULL;' '[[piksel] silmeli; aksi halde dizi sızdırılmış olmalıdır. – emlai