Autor Wątek: Image Resize  (Przeczytany 1750 razy)

Offline HellCat

  • Użytkownik

# Czerwiec 23, 2007, 13:41:16
Serwus.

Potrzebowałem zmienić na raz rozmiar plików graficznych sporej ilości zdjęć - przeglądarki dają taką opcję, ale siadłem szybko do C# i napisałem program. Wszystko pięknie, tylko że zresizowane foty strasznie dostały po tyłku jeśli chodzi o jakość.

Image OriginalImage;
OriginalImage = System.Drawing.Image.FromFile(imagefile);
Image thumbnailImage;
                                               
thumbnailImage = OriginalImage.GetThumbnailImage(640, 480, new Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero);
                        thumbnailImage.Save(this.textDir.Text + filename + "t.png");

Rozwiązanie na szybko, jak okazało się w praniu nie jest najlepsze - działa ale jakoś zdjęć po zmianie rozmiaru jest tragiczna...

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Czerwiec 23, 2007, 13:43:47
Skalowanie wymaga odpowiedniego algorytmu, by zachowywało jakość :). Jeden z najprostszych i dających przy tym niezłe rezultaty to skalowanie bilinearne. Instrukcja użytkowania jak zawsze w google.pl :).

Deus

  • Gość
# Czerwiec 23, 2007, 13:48:13
.
« Ostatnia zmiana: Kwiecień 21, 2008, 22:01:09 wysłana przez Szalonuki »

Offline HellCat

  • Użytkownik

# Czerwiec 23, 2007, 23:07:59
Skalowanie wymaga odpowiedniego algorytmu, by zachowywało jakość :). Jeden z najprostszych i dających przy tym niezłe rezultaty to skalowanie bilinearne. Instrukcja użytkowania jak zawsze w google.pl :).
Google man my friend.
Łudziłem się że może coś wbudowanego w .NET przyjdzie mi z pomocą.

Serwus

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Czerwiec 24, 2007, 10:33:51
Nie wiem jak z metodami których tu użyłeś ani jak ze zmniejszaniem zamiast zwiększania, ale pamiętam, że w .NET jednak jest możlwość skalowania obrazków wraz z filtrowaniem i to chyba domyślnie robi metoda przerysowująca prostokąt z jednego Graphics na drugi czy tam z Image na Graphics, nie pamiętam już dokładnie nazwy. Da się ustawić, czy ma stosować filtrowanie czy nie.

Offline revo

  • Użytkownik

# Czerwiec 24, 2007, 11:02:52
Nie wiem jak z metodami których tu użyłeś ani jak ze zmniejszaniem zamiast zwiększania, ale pamiętam, że w .NET jednak jest możlwość skalowania obrazków wraz z filtrowaniem i to chyba domyślnie robi metoda przerysowująca prostokąt z jednego Graphics na drugi czy tam z Image na Graphics, nie pamiętam już dokładnie nazwy. Da się ustawić, czy ma stosować filtrowanie czy nie.

A dokładniej w Graphics (mozna stworzyć za pomocą Graphics.FromImage) są InterpolationMode (Bicubic, Bilinear, High, HighQualityBicubic, HighQualityBilinear, Low, NearestNeighbor) i SmoothingMode (AntiAlias, HighQuality, HighSpeed, None).