Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Generic GDI+ error

Îåêßíçóå áðü ôï ìÝëïò Firebrand. Τελευταία δημοσίευση από το μέλος darklynx στις 17-05-2010, 02:30. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  16-05-2010, 16:28 58690

    Generic GDI+ error

    Γεια χαρά!

    Όλα όσα γράφω είναι για VB.NET και Winforms

    Προσπαθώ να σώσω μια εικόνα που έχω από ένα bitmat με την bitmap.save

    Αν βάλω σαν path το C:\filename.ext τότε μου την σώζει κανονικά.
    Αν παώ να την σώσω μέσα σε ένα folder που έχω στο project μου πετάει generic GDI+ error

    Ψιλιάζομαι ότι κάτι παίζει με τα permissions αλλά δεν κατάφερα να πετύχω την λύση.

    Έχει αντιμετωπίσει κανείς το ίδιο πρόβλημα. Πώς το λύσατε;
  •  16-05-2010, 17:51 58691 σε απάντηση της 58690

    Απ: Generic GDI+ error

    Δοκίμασε να σώσεις στο My Pictures που εκεί έχεις σίγουρα δικαίωμα. Αν παίξει πάει να πει ότι αυτό φταίει οπότε θα πρέπει να δώσεις δικαιώματα στο φάκελο. Διαφορετικά δεν υπάρχει λύση, δεν μπορείς να παρακάμψεις τα security constraints εκτός αν κάνεις impersonation πράγμα που θεωρώ επικίνδυνο ugly hack.

     


    Vir prudens non contra ventum mingit
  •  17-05-2010, 02:30 58695 σε απάντηση της 58690

    Απ: Generic GDI+ error

    Το όλο σενάριο να μην έχει writing permission στον φάκελο του project μου φαίνεται λίγο χλωμό,εξάλλου λογικά αυτός θα βρίσκεται στο MyDocuments οπότε και θα έχει ίδια δικαιώματα με τον MyPictures.

    Αυτό που μου φαίνεται πιο πιθανό είναι να έφτιαξες ένα αντικείμενο Bitmap φορτώνοντας ένα αρχείο από τον εν λόγω φάκελο,να το επεξεργάστηκες και μετά να προσπάθησες να το σώσεις στο ίδιο ακριβώς αρχείο,να έκανες δηλαδή κάτι σαν το παρακάτω:

    Bitmap bmp=new Bitmap("myimage.jpg");
    //Do something with the bitmap
    bmp.Save("myimage.jpg");
    //Generic GDI+ error

    Αυτό συμβαίνει επειδή όταν φορτώνεις ένα αρχείο εικόνας μέσω του αντικειμένου το υποκείμενο αρχείο κλειδώνει μέχρι να γίνει Dispose το αντικείμενο.Πράγμα το οποίο θα εξηγούσε γιατί το να το σώζεις σε άλλο path δείχνει να δουλεύει κανονικά.

    Αν λοιπόν έχω πέσει μέσα με την υπόθεσή μου,δύο λύσεις που θα μπορούσες να ακολουθήσεις είναι οι εξής:

    α)να σώσεις το αρχείο με άλλο όνομα ή σε άλλο path από αυτό που το φόρτωσες ή

    β)να δημιουργήσεις ένα προσωρινό αντικείμενο Bitmap,να αντιγράψεις την εικόνα σε αυτό,να ξεφορτωθείς το αρχικό αντικείμενο Bitmap ώστε να ξεκλειδώσει το αρχείο και μετά να καλέσεις την Save:

    Bitmap bmp=new Bitmap ("myimage.jpg");
    
    Bitmap tempbmp=new Bitmap(bmp.Width,bmp.Height);
    
    Graphics myGraphics=Graphics.FromImage(tempbmp);
    myGraphics.DrawImage(bmp,0,0);
    
    bmp.Dispose();
    
    tempbmp.Save("myimage.jpg");
    
    myGraphics.Dispose();
    tempbmp.Dispose();
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems