chrislem Δημοσ. 4 Νοεμβρίου 2008 Δημοσ. 4 Νοεμβρίου 2008 Κατ΄αρχήν καλησπέρα σας, Μου έχει ανατεθεί μία εργασία να κατασκευάσω ένα πρόγραμμα παρουσίασης εικόνων σε C++. Συγκεκριμένα το θέμα είναι αυτό. "Κατασκευή ενός προγράμματος για παρουσίαση εικόνων. Το πρόγραμμα θα μπορεί να φορτώνει τις εικόνες που θα φαίνονται αρχικά με το όνομα αρχείου σε μορφή λίστας με τη σειρά που φορτώνονται. Ο χρήστης θα μπορεί να εμφανίζει ένα preview ή ένα thumbnail για κάθε εικόνα. Ο χρήστης θα μπορεί επίσης να μπορεί να μεταβάλλει την σειρά των εικόνων και να διαγράφει/παρεμβάλλει εικόνες στην λίστα. Τέλος το πρόγραμμα θα μπορεί να παρουσιάζει τις εικόνες είτε με καθοριζόμενη χρονοκαθυστέρηση είτε περιμένοντας πάτημα πλήκτρου (Enter, βελάκι πάνω, κάτω (κ. λ. π ). Η λίστα των εικόνων θα μπορεί να σώζεται και να φορτώνεται ξανά. " Και ήθελα να ρωτήσω σε ποιο component θα μπορούν να φορτωθούν οι εικόνες μου? Οι εικόνες θα φορτώνονται μέσα απο το pc. Έτσι έβαλα ένα main menu με File->Open. Αρχικά ξεκίνησα βάζοντας ένα List View όπου εκεί θα φορτώνονται οι εικόνες αλλα δεν γίνεται.. Μήπως θα μπορούσατε να μου δώσετε τα φώτα σας??
PCharon Δημοσ. 4 Νοεμβρίου 2008 Δημοσ. 4 Νοεμβρίου 2008 Μου φαίνονται λίγο αόριστα αυτά που λες για να σε βοηθήσει κάποιος συγκεκριμένα. Δεν καταλαβαίνω τι πάει να πει "φορτώνονται". Επίσης δε διευκρινίζεις σε τι είδους αρχεία εικόνας αναφέρεσαι (για BMP είναι εύκολη δουλειά, αλλά για επιπλέον format θα χρειαστείς κάποια έτοιμη βιβλιοθήκη). Το ListView δεν κατάλαβα που κολλάει.
georgemarios Δημοσ. 4 Νοεμβρίου 2008 Δημοσ. 4 Νοεμβρίου 2008 προφανως το παληκαρι γραφει σε Visual C (MFC) για δες αν σου δινει μερικες ιδεες αυτο.
chrislem Δημοσ. 5 Νοεμβρίου 2008 Μέλος Δημοσ. 5 Νοεμβρίου 2008 Παιδιά με συγχωρείται για την ασάφεια μου. Γράφω σε Borland C++ Builder. Με την λέξη "φορτώνονται" εννόω ότι ο χρήστης πρέπει να έχει την δυνατότητα με την επιλογή File->Open να ανοίγει μια εικόνα (η εργασία δεν διευκρινίζει τι τύπου θα έιναι η εικόνα αλλά καλά θα ήταν να μπορεί να γίνει με όλους τους τύπους των εικόνων) απο το PC και να εμφανίζεται στην φόρμα. Το list view το χρησιμοποίησα γιατί νομίζω ότι έχει δυνατότητα να εμφανίζει σαν thumbnail και preview αλλά μάλλον έκανα λάθος όπως φαίνεται. Τι component (εργαλείο) θα χρησιμοποιήσω όπου θα εμφανίζονται οι εικόνες μου εκεί και θα μπορούν να φαίνονται σαν thumbnail η preview με το πάτημα των κατάλληλων κουμπιών φυσικά.. Σας ευχαριστώ προκαταβολικά.
fromaz Δημοσ. 5 Νοεμβρίου 2008 Δημοσ. 5 Νοεμβρίου 2008 Θες τα εξής: TOpenPictureDialog για το File/Open TListBox για τα filenames TImage για την απεικόνιση του επιλεγμένου image TTimer για το slideshow ΤPaintBox για τα thumbnails TPanel και TSplitters για το layout και το αυτόματο resizing. Η περισσότερη δουλειά, δηλαδή επιλογή/preview εικόνας, λίστα εικόνων και πλήρης απεικόνιση αυτών (manually ή auto), θα γίνει σχεδόν αυτόματα, με μερικές εντολές στους κατάλληλους event handlers. Θα χρειαστείς λίγες γραμμές για την απεικόνιση των thumbnails, την αλλαγή σειράς στο listbox, το keyboard, κλπ. Αν είσαι κάπως άνετος με τον Builder, σε 1 ωρίτσα είσαι έτοιμος.
Directx Δημοσ. 5 Νοεμβρίου 2008 Δημοσ. 5 Νοεμβρίου 2008 [..]Το list view το χρησιμοποίησα γιατί νομίζω ότι έχει δυνατότητα να εμφανίζει σαν thumbnail και preview αλλά μάλλον έκανα λάθος όπως φαίνεται.[..] Όχι δεν έχεις κάνει λάθος' date=' μπορείς να χρησιμοποιήσεις το TListView για Thumbnail preview, τόσο σε μορφή (ViewStyle) vsReport όσο και σε μορφή vsIcon, με την προϋπόθεση όμως ότι οι εικόνες θα πρέπει να αποθηκευτούν σε ένα TImageList με μεγάλες διαστάσεις (Width / Height), σε μορφή scaled (stretched) Bitmap (TBitmap). Ακολουθεί ένα snapshot για να δεις πως θα μπορούσε να χρησιμοποιηθεί το TListView για image Preview, σε δυο modes λειτουργίας: [center']vsIcon vsReport [/center] Σημ: Φυσικά μπορείς να τοποθετήσεις JPEG στο TImageList αφού πρώτα μετατρέψεις το JPEG σε TBitmap (δες την TJPEGImage class). Αν θες να χρησιμοποιήσεις / υποστηρίξεις περισσότερα image formats ρίξε μια ματιά στην FreeImage library (Open Source) η οποία λειτουργεί καλά με τον C++ Builder compiler / linker –αναζήτησε παλαιότερα άρθρα στο παρόν forum όπου αναλύω διεξοδικά την χρήση της FreeImage στην VCL – C++ Builder. Καθώς πρόκειται για άσκηση / εργασία, και σεβόμενος την πολιτική του forum δεν μπορώ να δημοσιεύσω κώδικα αναφοράς, με λίγη εμπειρία πάνω στον C++ Builder όμως όπως είπε και ο fromaz το πρόγραμμα μπορεί να ετοιμασθεί σχετικά γρήγορα. Καλή τύχη. Υ.Γ. Φυσικά η χρήση του TListView για preview μπορεί να σου κοστίσει μνήμη...
chrislem Δημοσ. 26 Νοεμβρίου 2008 Μέλος Δημοσ. 26 Νοεμβρίου 2008 Ρε παιδια πως μπορω να φορτώσω μία εικόνα σε μία image List? Θέλω μόλις φορτώνω μία εικόνα απο αρχείο (image1->picture->loadfromfile(OpenPictureDialog1->FileName) να μπαινει κατευθειαν και στην image list. Τι κομμάτι κώδικα πρέπει να γράψω?
Directx Δημοσ. 26 Νοεμβρίου 2008 Δημοσ. 26 Νοεμβρίου 2008 Ρε παιδια πως μπορω να φορτώσω μία εικόνα σε μία image List? Θέλω μόλις φορτώνω μία εικόνα απο αρχείο (image1->picture->loadfromfile(OpenPictureDialog1->FileName) να μπαινει κατευθειαν και στην image list. Τι κομμάτι κώδικα πρέπει να γράψω? Απλά χρησιμοποιείς το ->Add του TImageList. Στην πρώτη παράμετρο περνάς το bitmap σου στην δεύτερη NULL. π.χ.: > if(OpenPictureDialog1->Execute()) { Graphics::TBitmap *bmpPicture = new Graphics::TBitmap(), *bmpResize = new Graphics::TBitmap(); try { // Φόρτωσε την εικόνα από το TOpenPictureDialog bmpPicture->LoadFromFile(OpenPictureDialog1->FileName); /* * Η εικόνα θα γίνει resize στις διαστάσεις του TImageList μας οπότε * φτιάχνουμε ένα νέο Bitmap με τις διαστάσεις αυτές. */ bmpResize = new Graphics::TBitmap(); bmpResize->Width = ImageList1->Width; bmpResize->Height= ImageList1->Height; // Σχεδιάζουμε (StretchDraw) την εικόνα με τις νέες διαστάσεις bmpResize->Canvas->StretchDraw(Rect(0, 0, bmpResize->Width, bmpResize->Height), bmpPicture); /* * Προσθέτουμε την εικόνα με τις τροποποιημένες διαστάσεις στο TImageList μας * το οποίο επιστρέφει την θέση της στην λίστα. */ int nPosition = ImageList1->Add(bmpResize, NULL); // Πληροφορίες ... ShowMessage("Picture added in ImageList1 at position #" + IntToStr(nPosition)); } __finally { // Καθαρισμός.. delete bmpPicture; delete bmpResize; } } Υ.Γ. Δες τον κώδικα που σου έστειλα χθες!!!!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.