Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[sfml] Tekstury trzymane w pamięci mniejsze niż rzeczywiste obrazki.

Ostatnio zmodyfikowano 2015-07-05 21:29
Autor Wiadomość
suas
Temat założony przez niniejszego użytkownika
[sfml] Tekstury trzymane w pamięci mniejsze niż rzeczywiste obrazki.
» 2015-07-05 13:52:51
Witam, no więc piszę program w którym używam wielu dużych obrazków, a i tak przed wyświetleniem je skaluję. Chciałbym trzymać w pamięci taką przeskalowaną teksturę, a nie cały duży obrazek. Nie mam pojęcia jak się za to zabrać. Miałem parę pomysłów, ale wszystkie były raczej takie sobie, i myślę że nie zadziałałyby. szukałem w internecie ale nic nie mogłem znaleźć. Dodam, że nie mogę tych obrazków przeskalować w paincie.
P-134341
pekfos
» 2015-07-05 15:24:10
Dodam, że nie mogę tych obrazków przeskalować w paincie.
Z powodu przezroczystości? Możesz skalować w GIMPie, jeśli tylko o to chodzi. Nie ma sensu trzymać dużych obrazów, skoro nigdy nie używasz ich nieprzeskalowanych do znacznie mniejszych rozmiarów.
P-134343
suas
Temat założony przez niniejszego użytkownika
» 2015-07-05 18:38:14
Nie, z tego powodu, że to, co piszę jest czymś w rodzaju w rodzaju przeglądarki obrazów. Na początku chciałem to napisać w WINAPI, ale pomyślałem, że dobrze by było, gdyby program działał w fullscreenie. Mniejsze obrazki mają mi służyć jako miniaturki. Jeśli miałbym wczytywać każdą miniaturkę w momencie, gdy mam ją wyświetlić, to przesuwanie suwaka trwałoby okropnie długo.
 Myślałem nad rozwiązaniem i wymyśliłem coś takiego:
C/C++
sf::Texture textureL;
sf::Texture textureT;
textureL.loadFromFile( "test.jpg" );
sf::Image image = textureL.copyToImage();
sf::Uint8 * arr = new sf::Uint8[ textureL.getSize().x / 5 * textureL.getSize().y / 5 * 4 ];
const sf::Uint8 * nowa = image.getPixelsPtr();
/*i w tym miejscu mam problem. Powinienem umieścić tutaj pętlę która kopiowałaby do tablicy nowa co np. piąty wiersz i co piątą kolumnę, a lenie mam pojęcia jak taka pętla miałaby wyglądać*/
textureT.create( textureL.getSize().x / 5, textureL.getSize().y / 5 );
textureT.update( nowa );
delete[] nowa;
Poza tym nie wiem jak taki przerobiony obrazek by wyglądał.
P-134350
1aam2am1
» 2015-07-05 19:31:41
Załaduj texture;
Przeskalują ją.
Narysuj ją na sf::RenderTexture

Załaduj teksture z sf::RenderTexture do swojej tekstury

Masz gotową mniejszą teksture;
P-134352
suas
Temat założony przez niniejszego użytkownika
» 2015-07-05 21:29:21
działa, dzięki. Do głowy mi nie przyszło, że można rysować po czymś innym niż okno. Chyba muszę dokładniej czytać dokumentację.
P-134353
« 1 »
  Strona 1 z 1