Sprawdzenie czy plik jest obrazkiem

Odpowiedz Nowy wątek
2006-11-13 10:04
0

Mam PictureBox, ładuje do niego obrazek, przez OpenFileDialog, mniej więcej w ten sposob:

if (imageDialog.ShowDialog() == DialogResult.OK)
    pix.Image = Image.FromFile(imageDialog.FileName);

Jak sprawdzić czy plik imageDialog.FileName jest obsługiwanym formatem obrazka?
Czy zostaje mi tylko wyłapywanie wyjątków?

if (imageDialog.ShowDialog() == DialogResult.OK)
    try{
        pix.Image = Image.FromFile(imageDialog.FileName);
    }
    catch{
        System.Windows.Forms.MessageBox.Show("Coś nawaliło :P");
    }

Pozostało 580 znaków

2006-11-13 10:42
rookie
0

if (pictureBox1.Image.PixelFormat == System.Drawing.Imaging.PixelFormat.Format24bppRgb)

to może być pomocne :) z tym że przyklad jak widać jest ustawiony na bitmape 24-ro bitową (akurat tego wymagał program)

Object browser mówi że jest jeszcze coś takiego jak System.Drawing.Imaging.ImageFormat ale czy da sie to wykorzystać to musisz sam sprawdzić

Pozostało 580 znaków

2006-11-13 11:08
0

zapomniałem napisać, że jak wybiorę nie-obrazek (np. plik tekstowy), to wyrzuca OutOfMemoryException ( i chyba niestety pozostanie mi tylko obsłużenie tego wyjątku :| )

a ja szukam czegoś w stylu IsValidImage("c:\plik.aaa");

Pozostało 580 znaków

2006-11-13 11:37
rookie
0

Zawsze mozesz założyć filtr na okno:
imageDialog.Filter = "Bitmapy|*.bmp|Pliki jpeg|*.jpg|Tiff|*.tiff";
Zawsze jest to jakieś ograniczenie użytkownika.

Pozostało 580 znaków

2006-11-13 12:16
0

:)
wiem... jednak userzy są wredni, zawsze się znajdzie taki user co stwierdzi, że plik .exe albo .pdf to tez obrazek, zaznaczy "All Files", wybierze i sie program zwiesi. :D

Pozostało 580 znaków

2006-11-13 12:41
rookie
0

wcale nie musisz dawać możliwości wybrania pliku o dowolnym rozszerzeniu, przykład który podałem wczytuje tylko pliki bmp, jpg i tiff. Oczywiście "wredny_user" moze zmienić rozszerzenie pliku exe na bmp ale to musiałaby być osoba która na siłe chciałaby zawiesić program i dla takie możliwości mozesz napisać obsługe wyjątku.
A filtr który obsługuje kilka formatów na raz powinien wyglądać tak: imageDialog.Filter = "Pliki obrazów (*.bmp;*.jpg;*.gif;*.tiff)|*.bmp; *.jpg;*.tiff; *.gif ";

Pozostało 580 znaków

2006-11-13 12:47
0

Raczej pozostaje lapanie wyjatku, bo po to rzuca wyjatek - kiedy format nie jest obslugiwany albo plik nie istnieje. Zreszta taka sytuacja pasuje do definicji sytuacji wyjatkowej :)


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-11-13 13:07
0

w sumie racja.. łudziłem sie troche :)... bo np. jest cos takiego jak
System.IO.File.Exists(sciezka); co sprawdza czy plik istnieje, więc pozwala zrezygnować z oblugi wyjatku.

dobra, zostane przy tych wyjątkach :P
Dzięki.

Pozostało 580 znaków

2006-11-13 13:49
rookie
0

Widze że nie probowałeś tego co Ci na początku zaproponowałem, a ja właśnie sprawdziałem i widze że powinno działać.

Sprobuj tak:
Tworzysz tablice formatów plików graficznych:

 System.Drawing.Imaging.PixelFormat[] formaty = new System.Drawing.Imaging.PixelFormat[x]
            {
                System.Drawing.Imaging.PixelFormat.Format16bppArgb1555,
                System.Drawing.Imaging.PixelFormat.Format24bppRgb,
                System.Drawing.Imaging.PixelFormat.Format16bppGrayScale
                .
                .
                itd
            };

następnie przy wczytywaniu pliku przy pomocy pętli sprawdzasz czy jego format jest jednym z tych z tablicy if (pictureBox1.Image.PixelFormat == formaty[i])

z tym, że musiałbyć ustawić sprawdzanie przed wczytaniem do pictureboxa - ale to taki drobny szczegół ;)

Pozostało 580 znaków

2006-11-13 13:51
0

Taaa, tyle, ze twoj kod zadziala, jesli Image w ogole jest obrazkiem. A jemu najpierw poleci wyjatek, a dopiero pozniej moze sie wziac za jakiekolwiek sprawdzanie formatu (bo przeciez obrazek najpierw sie musi wczytac).


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-11-13 14:14
0

własnie, jesli to nie jest obrazek, tylko np. exe to wywali wyjątek zanim zdązy przypisać to do Image.

jest w sumie sposób, że moge sprawdzic naglowek pliku, ale to sie mija z celem, tzn. za duzo roboty :P

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0