Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
Autor | Správa |
---|
Registrovaný: 03.08.10 Prihlásený: 14.07.11 Príspevky: 15 Témy: 5 | 5 |
Potreboval by som mensiu radu co by ma usmernila. Potreboval by som spravit mensi program a kedze nie som ziaden programator, viem vacsinou iba zaklady, tak neviem presne ako by som s tym programom zacal. Neviem co je na to najviac vhodne.
popis programu:
Mam pole napr. 1000x1000 v ktorom su napr. iba dve hodnoty. Ja potrebujem toto pole graficky zobrazit ako stvorceky roznych farieb [napr. 0--> modra 1-->cerverna], potom ako na dany stvorcek kliknem tak my mal zmenit farbu napr. z modrej na cervenu.
Znie to ako prkotina ale ked sa clovek nevyzna tak aj take nieco vie byt tazke . Skusal som to v GTK+ pomocou elementu gtk_event_box, aj to fungovalo, lenze ak pouzijem pole velke napr. 1000x1000 tak sa okno programu neotvori ani po 10min. Cize tymto sposob to asi nedocielim. Co teda pouzit ?
Vopred dakujem za akukolvek radu, // pridané po 1 minúte od posledného príspevkuZabudol som dodat, vsetko robim v Linuxe a c++.
|
|
Registrovaný: 11.01.09 Prihlásený: 14.01.25 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Napis sem kod, ktory si skusal, lebo neviem si presne predstavit, co konkretne a ako to robis. Potom ti viac dokazeme pomoct.
|
|
Registrovaný: 03.08.10 Prihlásený: 14.07.11 Príspevky: 15 Témy: 5 | 5 |
Zacal som to robit, ale ked som zistil, ze ak zadam pole 1000x1000 tak mi to uz nezobrazi okno, tak som s tym prestal, takze v kode je len cast kde chcem zobrazit okno s tymi elementami. Cize tento kod je len test ci by to slo, no a neide to. Je to asi prilis vela elementov. Preto hladam neaky iny sposob, ako zobrazit take mnozstvo dat a potom ich aj moct upravit a ulozit. mozno nieco ako graficky editor ale len s dvoma farbami , napr. kazdy pixel by predstavoval jeden bod v mojej matici.
Kód: #include <stdlib.h> #include <iostream> #include <stdio.h> #include <string.h>
#include <gtk/gtk.h>
using namespace std;
struct block {
GtkWidget * block; gint value; }; struct block *map;
gint width; gint height;
gint block_size;
GtkWidget *window; GtkWidget *vbox;
void button_press_callback (GtkWidget *widget, gpointer *index){
}
void button_release_callback (GtkWidget *widget, gpointer *index){
}
void test(){ gint i, a, b, sirka, vyska; GtkWidget *hbox;
sirka=1000; vyska=1000; vbox=gtk_vbox_new(0,0); g_free (map); map = (struct block *)g_malloc0(sizeof(struct block) * sirka * vyska);
i=0; for(a=0;a<sirka; a++){ hbox = gtk_hbox_new (0, 0); for(b=0;b<vyska;b++){ GtkWidget *image; map[i].block = gtk_event_box_new (); image=gtk_image_new_from_file("./Resources/red.png");
gtk_widget_set_usize (map[i].block, block_size, block_size); if((a%2)==0 && (b%2)==0) gtk_container_add (GTK_CONTAINER (map[i].block), image);
g_signal_connect (G_OBJECT (map[i].block), "button_press_event", G_CALLBACK (button_press_callback), (gpointer)i); g_signal_connect (G_OBJECT (map[i].block), "button_release_event", G_CALLBACK (button_release_callback), (gpointer)i);
gtk_box_pack_start (GTK_BOX (hbox), map[i].block, FALSE, FALSE, 0);
i++; } gtk_box_pack_start(GTK_BOX (vbox), hbox, FALSE, FALSE, 0); } gtk_container_add(GTK_CONTAINER(window),vbox); gtk_widget_show_all (vbox);
}
int main(int argc, char* argv[]){
gtk_init(&argc, &argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(window, "delete_event", G_CALLBACK(gtk_main_quit), NULL); block_size=1;
test();
gtk_widget_show(window);
gtk_main(); g_free (map); return 0; }
|
|
Registrovaný: 11.01.09 Prihlásený: 14.01.25 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Pri takom velkom pocte grafickych prvkov necakaj zazraky, aj ked nemas najslabsi PC. GTK neovladam, ale ja by som to riesil skor nejakym platnom, image-om. Vykreslis si obycajny image o velkosti 1000x1000 pixelov a osetris udalost kliknutia na tento image. Potom pixel, na ktorej pozicii bol kurzor prekreslis na inu farbu.
Toto riesenie ti nezoberie takmer ziaden procesorovy cas a aplikacia ti nezatuhne. Jedine, co by ti snad mohlo prekazat je, ze ak potrebujes nejake medzery medzi stvorcekmi, potom by to nebolo vhodne riesenie.
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 | 22 Bydlisko: Zilinska Un... |
Ja tiez neovladam GTK, ale data 1000x1000 su spracovatelne v realnom case na normalnom PC, nie je to nic hrozne, takze si mal nieco zle. Ja by som na to pouzil OpenGL, ale ako zaciatocnikovi by ti to dlho trvalo. Robil som v MFC, tam som si vykreslil bimapu a klikal na pixely a farbil a potom ju stiahol, nic narocne.
Okrajovo som si vsimol toto volanie:
image=gtk_image_new_from_file("./Resources/red.png");
V realtime v slucke? blaznis? 1000000 krat v jednej sluscke realtimu alokujes?
_________________ Notebook: HP EliteBook 8740w
You can see my work in my www |
|
Registrovaný: 03.08.10 Prihlásený: 14.07.11 Príspevky: 15 Témy: 5 | 5 |
ten riadok si nevsimaj
image=gtk_image_new_from_file("./Resources/red.png");
to som uz davno odkomentoval , teda hned ako mi zmrzol pc a restartoval som ho:), to s tou bitmapou je fajn napad. da sa to robit aj v Linuxe alebo je to len nieco specialne pre MFC ?
|
|
Registrovaný: 11.01.09 Prihlásený: 14.01.25 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Ak ti vyhovuje ten napad s bitmapou, tak to kludne sprav aj v GTK+. Neviem ci je tam taky ist mechanizmus, ako napr v QT, alebo v SDL vo windowse, ale dam ti aspon nejaky zakladny postup:
1.) vytvoris si kresliacu plochu - platno (canvas) - o pozadovanej velkosti. Nemusi to byt priamo bitmapa, to bol len priklad. Vravim, neviem presne, co vsetko ponuka GTK.
2.) budes osetrovat kliknutie na dany kresliaci objekt
3.) zistis X-ovu a Y-ovu suradnicu v dobe kliknutia na objekt
4.) do pola na danu suradnicu zapises cislo odlisne od toho, ktore tam je ( ak tam povedzme zapisujes iba 0 a 1, tak ich jednoducho znegujes kazdym pristupom)
Skusal som ti najst nejake example na vykreslenie, skus sa v tom trocha povrtat, ako vytvorit nejaku kresliacu plochu.
http://www.jroller.com/RickHigh/entry/gtk_drawing_example_done_in
http://www.gtk.org/tutorial1.2/gtk_tut-23.html
|
|
Registrovaný: 02.11.07 Prihlásený: 18.03.15 Príspevky: 470 Témy: 22 | 22 Bydlisko: Zilinska Un... |
Presne, ked si najdes dobry tutorial urcite to tam najdes. To su zaklady podobnych tutorialov: bottony,eventy,kreslenie ... . Ak by si to skusal v MFC, mozem ti poslat prednesku, kde sme sa tomu venovali, ale vidim, ze si linuxak, co je fajn. Ja by som si zvolil QT alebo mozes skusit aj Java, to by tiez nebola zla volba. Nech uz si vyberies hocico, v kazdom takomto vyspelom GUI systeme je moznost kreslenia do canvasu, len si to treba nastudovat. Pozor na alokacie, kde ich davas. Pamat alokujes raz v konstruktore a potom do nej vkladas nove a nove data v sluckach, zvycajne .
_________________ Notebook: HP EliteBook 8740w
You can see my work in my www |
|
Registrovaný: 03.08.10 Prihlásený: 14.07.11 Príspevky: 15 Témy: 5 | 5 |
Vdaka za tipy, urcite si nieco z toho vyberiem
|
|
Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Assembler, C, C++, Pascal, Java | 1 | 400 | 03.01.2013 13:40 BX | | v Ponuka práce | 1 | 611 | 24.10.2016 15:28 michalesku | | v Assembler, C, C++, Pascal, Java | 6 | 2278 | 25.06.2011 23:56 street_punk | | v Ponuka práce | 0 | 442 | 09.08.2013 11:06 Vasinova | | v Assembler, C, C++, Pascal, Java | 1 | 499 | 20.11.2008 15:57 neutronmind | | v Assembler, C, C++, Pascal, Java | 5 | 713 | 10.06.2009 19:24 Flexor28 | | v Ponuka práce | 0 | 464 | 17.08.2015 21:07 flesik | | v PHP, ASP | 5 | 955 | 02.06.2007 10:51 zero0x | | v Operačné systémy Microsoft | 3 | 930 | 31.03.2009 7:15 Suzuki2003 | | v Assembler, C, C++, Pascal, Java | 5 | 551 | 31.03.2014 16:18 chrono | | v Operačné systémy Microsoft | 2 | 517 | 03.01.2012 16:52 KeNNi | | v PHP, ASP | 2 | 691 | 24.06.2023 12:12 jakubv | | v PHP, ASP | 6 | 710 | 14.09.2007 11:06 Blackshadow | | v PHP, ASP | 0 | 878 | 07.02.2014 9:48 Merlin_sk | | v Ostatné programy | 0 | 808 | 31.03.2010 11:15 T0mashK0 | | v Ostatné programy | 0 | 306 | 07.10.2024 20:35 Googler1 |
|