Tworzenie obrazka

Tworzenie obrazka
K3
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 9 lat
  • Postów:4
0

Witam,
Mój problem polega na tym, że chcę utworzyć duży obraz, z kilku mniejszych (44x44). Mam np. w folderze ze skryptem 16 obrazków, a program odpowiednio je układa na nowej bitmapie (np. tworze ją o rozmiarze 440x440 i sa układane od lewego górnego rogu w dół, jak dojedzie do końca to 2 kolumna do dolu itd)

Jakiej biblioteki użyć oraz ew. jakich funkcji?

0

SDL, SFML, ALLEGRO.

0

OpenGL?

K5
  • Rejestracja:około 12 lat
  • Ostatnio:około 7 lat
  • Lokalizacja:Tutaj,obok
  • Postów:759
0

Moim zdaniem Allegro.


Jeśli mój post jest dowodem mojej niekompetencji, to trudno, ale po to pytam, żeby się czegoś dowiedzieć.
MA
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:49
1
kamil333 napisał(a):

Jakiej biblioteki użyć oraz ew. jakich funkcji?

Zależy jaki format obrazków. Gdy musiałem zrobić coś podobnego, ale format
obrazków zależał ode mnie, to zapisałem sobie obrazki w formacie RAW (bez
metadanych) i operowałem na obrazkach bez żadnej biblioteki. Jeśli format
jest prosty (np. bmp) to też można poradzić sobie bez biblioteki. Przy bardziej
skomplikowanych formatach (jpg, gif, png) ja bym użył QT.


Pozdrawiam
Endrju
BMP nie jest taki prosty.
MA
Nie wiem, ja nie widzę w tym nic trudnego. Kiedyś napisałem wczytywanie true-color może w 30 minut.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:minuta
1

akiej biblioteki użyć oraz ew. jakich funkcji?
Każdej, która pozwala na odczyt i zapis bitmapy w potrzebnym formacie.

MA
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:49
0
kamil333 napisał(a):

Jakiej biblioteki użyć oraz ew. jakich funkcji?

Jeśli możesz pracować na bmp, to ogranicz się tylko do bmp true color.
Wszystkie informacje są na wikipedii. Wczytuje się nagłówek, a po nagłówku
są dane o kolorach - każde kolejne trzy bajty to kolejne informacje o
kolejnym pikselu w RGB.


Pozdrawiam
_13th_Dragon
"każde kolejne trzy bajty to kolejne informacje o kolejnym pikselu w RGB" - bzdura, może samo poczytaj o formacie BMP zanim zaczniesz udzielać rad.
MA
Przecież doczyta szczegóły na wikipedii... generalnie tak jest jak napisałem: nagłówek i potem dane RGB, dla niektórych rozmiarów jeszcze padding, albo odwrócona kolejność... ciekawe czemu sam nie napiszesz szczegółowego eseju na temat wszystkich odmian BMP?
msm
@mariotti - a nie jest tak że Twoja wiedza na temat .bmp jest właśnie z wikipedii :]? Też pisałem parsowanie .bmp i wszystkich możliwości właściwie nie sposób obsłużyć samemu, a w każdej odmianie czeka zazwyczaj jakaś ukryta niespodzianka (typu wspomniany padding). Fakt, napisanie wczytywania tak żeby działało dla jednego obrazka jest dość łatwe, napisanie tak żeby działało dla każdego - zdecydowanie trudne.
Endrju
Właśnie dlatego napisałem, że BMP nie jest proste. Proste to jest P*M. @msm: na wiki jest całkiem dobry opis BMP akurat, no ale to w końcu "encyklopedia" a nie manual, więc pewnie nie ma wszystkich kruczków. ;-)
MA
A ja właśnie dlatego napisał wyraźnie bmp "true color", a nie bmp "wszystkie odmiany" bo to jest proste jak....
K3
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 9 lat
  • Postów:4
0

dzieki za odpowiedzi, zrobilem wszystko co chcialem za pomoc allegro, temat do zamkniecia.

K3
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 9 lat
  • Postów:4
0

Nie chce zakładać nowego wątku, więc zapytam tutaj. Jak w allegro zrobić takie coś, że jak się kliknie lewym przyciskiem myszy na dany fragment bitmapy (moja jest podzielona na 144 części) to ten obrazek się obróci o 90 stopni w prawo?

Wiem jak zrobić obracane (za pomocą rotate_sprite) ale nie wiem jaki dać warunek...

MA
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:49
0
kamil333 napisał(a):

Nie chce zakładać nowego wątku, więc zapytam tutaj. Jak w allegro zrobić takie coś, że jak się kliknie lewym przyciskiem myszy na dany fragment bitmapy (moja jest podzielona na 144 części) to ten obrazek się obróci o 90 stopni w prawo?

Wiem jak zrobić obracane (za pomocą rotate_sprite) ale nie wiem jaki dać warunek...

Nigdy nie pisałem nic w allegro, ale bym szukał tam:
http://cpp0x.pl/kursy/Kurs-Allegro-4-x-C++/Myszka/73


Pozdrawiam
K3
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 9 lat
  • Postów:4
0

Niestety nie potrafię sobie z tym poradzić.. Mam taki program

Kopiuj
 
#include <iostream>
#include <allegro.h> 

using namespace std;

int mx = 0, my = 0, mb = 0;
void myszka()
{
    if( mx != mouse_x || my != mouse_y || mb != mouse_b )
    {
        mx = mouse_x;
        my = mouse_y;
        mb = mouse_b;
    }
};


int main(){
    int x=0;
    int y=0;
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 528, 528, 0, 0 );
    clear_to_color( screen, makecol( 128, 128, 128 ) );

BITMAP * rurka = NULL;
BITMAP * bufor = create_bitmap( 44, 44 );
rurka = load_bmp( "rurka1.bmp", default_palette );


for (int i=0; i<=11; i++)
{
blit( rurka, screen, 0, 0, x, y, 44, 44);
y=y+44;
}
readkey();


destroy_bitmap (bufor);
destroy_bitmap( rurka );

allegro_exit();
return 0;
}

END_OF_MAIN();

i nie wiem w którym miejscu wkleić coś takiego.. o ile trzeba to tak zrobić

Kopiuj
if (mb == 1)
{
rotate_sprite( bufor, rurka, 0, 0, ftofix( 64 ) );
blit( bufor, screen, 0, 0, x, y, 44, 44);
} 

byłbym bardzo wdzięczny za pomoc

edytowany 2x, ostatnio: kamil333
msm
Administrator
  • Rejestracja:około 16 lat
  • Ostatnio:5 miesięcy
1

Dlaczego nie chcesz zakładać nowego wątku?
Poważnie, zakładanie nowego wątku nie gryzie.
Jeśli ktoś kontynuuje wątek zadając zupełnie inne pytanie bo nie chce robić bałaganu to efekt jest zupełnie inny, wręcz odwrotny - w wątku robi się de facto offtopic (rozmowa na inny temat niż pierwotny), osoby chcące pomóc muszą najpierw przeczytać pierwszy problem i dowiedzieć się że jest rozwiązany itd.

Odnośnie pytania - ciężko coś powiedzieć nie wiedząc jak ten program piszesz, z tego co pamiętam mysz jest w allegro obsługiwana po prostu przez samozmieniające się zmienne mouse_x itd.
Ogólnie musisz

  1. zareagować jakoś na kliknięcie myszką
  2. zmiana jakiejś informacji o stanie fragmentu bitmapy
  3. przy następnym rysowaniu całej sceny, narysować bitmapę odwróconą o 90st. jeśli flaga obrócenia jest zapalona (jeśli nie masz pętli głównej, możesz to zrobić od razu (albo, lepiej, dorobić pętlę główną)).

edit: - odpisałeś kiedy ja pisałem.
No więc ten kod (1 to stała odpowiadająca LPM, ściśle bardziej powinno się to traktować jako maskę bitową):

Kopiuj
if (mb == 1) {
    // ...
} 

Powoduje że kiedy jest wciśnięty LPM wykonuje się // ...
Czyli jeśli go wrzucisz do myszka(), powinien robić mniej-więcej to co chcesz.
Tylko to myszka() musisz wywoływać, popatrz do zalinkowanego artykułu zresztą (http://cpp0x.pl/kursy/Kurs-Allegro-4-x-C++/Myszka/73)

edytowany 1x, ostatnio: msm

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.