Tworzenie obrazka

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?

0

Moim zdaniem Allegro.

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.

1

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

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.

0

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

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...

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

0

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

 
#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ć

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

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ą):

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)

1 użytkowników online, w tym zalogowanych: 0, gości: 1