| | |
| 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 | Napísal miroot: 06.07.2011 17:58 | |
|
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ý: 19.03.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 06.07.2011 22:43 | |
|
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 | Napísal autor témy miroot: 07.07.2011 0:11 | |
|
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ý: 19.03.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 07.07.2011 19:43 | |
|
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 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 | Napísal autor témy miroot: 09.07.2011 20:17 | |
|
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ý: 19.03.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 09.07.2011 20:35 | |
|
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 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 | Napísal autor témy miroot: 14.07.2011 20:18 | |
|
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 |
---|
| Pridanie neštandardnej knižnice visual c++ 2010 Express v Assembler, C, C++, Pascal, Java | 1 | 319 | 03.01.2013 13:40 BX | | Hladame 3x C/C++ Linux developer- projekt 11/2016-2/2017 v Ponuka práce | 1 | 543 | 24.10.2016 15:28 michalesku | | C alebo C++ potrebujem poradiť :) v Assembler, C, C++, Pascal, Java | 6 | 2163 | 25.06.2011 23:56 street_punk | | C++/Linux/PHP v Ponuka práce | 0 | 404 | 09.08.2013 11:06 Vasinova | | Prekladac na C++ pre Linux v Assembler, C, C++, Pascal, Java | 5 | 665 | 10.06.2009 19:24 Flexor28 | | Hladam C++ developera pre linux v Ponuka práce | 0 | 417 | 17.08.2015 21:07 flesik | | Potreboval by som poradit s premennymi v C++ v Assembler, C, C++, Pascal, Java | 1 | 462 | 20.11.2008 15:57 neutronmind | | kniznice v PHP, ASP | 5 | 866 | 02.06.2007 10:51 zero0x | | Chyba knižnice v Operačné systémy Microsoft | 3 | 810 | 31.03.2009 7:15 Suzuki2003 | | Externe kniznice v Assembler, C, C++, Pascal, Java | 5 | 469 | 31.03.2014 16:18 chrono | | Windows 7 knižnice v Operačné systémy Microsoft | 2 | 444 | 03.01.2012 16:52 KeNNi | | Načítanie knižnice PhpWord v PHP, ASP | 2 | 597 | 24.06.2023 12:12 jakubv | | Zend framework 1 kniznice v PHP, ASP | 0 | 698 | 07.02.2014 9:48 Merlin_sk | | Miniatury bez GD kniznice v PHP, ASP | 6 | 631 | 14.09.2007 11:06 Blackshadow | | Chyba-Nepovolene premiestnenie systemovej kniznice DLL v Ostatné programy | 0 | 652 | 31.03.2010 11:15 T0mashK0 | | Mandriva Linux vs Suse Linux v Operačné systémy Unix a Linux | 1 | 792 | 04.09.2007 16:34 Intelman |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|