SFML
alone offers no way to prompt the user to select an image. But, you can use an Image Selection Dialog from a toolkit such as Qt, wxWidgets or use the API of your program's own target system.
For Windows (using WIN32 API) you can open a window to select an image using the following function:
#include <Windows.h> // Para a janela de selecionar o arquivo
#include <string>
#include <cstring>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
sf::Texture LoadTexture(void)
{
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = 0;
ofn.lpstrDefExt = 0;
ofn.lpstrFile = new TCHAR[512];
ofn.lpstrFile[0] = 'sf::Texture textura = LoadTexture(); // chama a função anterior.
// Vincula a texture ao sprite.
sf::Sprite sprite;
sprite.setTexture(textura);
';
ofn.nMaxFile = 512;
ofn.lpstrFilter = NULL;
ofn.nFilterIndex = 0;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = L"Selecione uma Imagem";
ofn.Flags = 0;
GetOpenFileName(&ofn);
// Converte para std::string.
std::wstring wstr = ofn.lpstrFile;
std::string str(wstr.begin(), wstr.end());
// Armazenará a imagem.
sf::Texture texture;
// Verifica se o arquivo é válido e se foi possível carregar.
if (!texture.loadFromFile(str))
{
MessageBox(NULL, L"Imagem inválida!", L"Erro", MB_OK);
}
return texture;
}
Then, bind to sf::Sprite
:
window.draw(sprite);
And finally, just draw:
#include <Windows.h> // Para a janela de selecionar o arquivo
#include <string>
#include <cstring>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
sf::Texture LoadTexture(void)
{
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = 0;
ofn.lpstrDefExt = 0;
ofn.lpstrFile = new TCHAR[512];
ofn.lpstrFile[0] = 'sf::Texture textura = LoadTexture(); // chama a função anterior.
// Vincula a texture ao sprite.
sf::Sprite sprite;
sprite.setTexture(textura);
';
ofn.nMaxFile = 512;
ofn.lpstrFilter = NULL;
ofn.nFilterIndex = 0;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = L"Selecione uma Imagem";
ofn.Flags = 0;
GetOpenFileName(&ofn);
// Converte para std::string.
std::wstring wstr = ofn.lpstrFile;
std::string str(wstr.begin(), wstr.end());
// Armazenará a imagem.
sf::Texture texture;
// Verifica se o arquivo é válido e se foi possível carregar.
if (!texture.loadFromFile(str))
{
MessageBox(NULL, L"Imagem inválida!", L"Erro", MB_OK);
}
return texture;
}