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:prawie 16 lat
  • Ostatnio:4 miesiące
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
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)