Chcę przeskalować obraz w C # z poziomem jakości tak dobrym jak Photoshop. Czy jest dostępna biblioteka do przetwarzania obrazów C # do wykonania tego zadania?
c#
image
image-processing
image-manipulation
image-scaling
Ramesh Soni
źródło
źródło
Odpowiedzi:
Oto ładnie skomentowana klasa pomocnicza Image Manipulation, której możesz się przyjrzeć i której możesz użyć. Napisałem to jako przykład wykonywania pewnych zadań związanych z obróbką obrazu w C #. Będziesz zainteresowany funkcją ResizeImage, która przyjmuje System.Drawing.Image, szerokość i wysokość jako argumenty.
Aktualizacja
Kilka osób pytało w komentarzach o próbki, jak korzystać z klasy ImageUtilities, więc proszę bardzo.
Uwaga
Pamiętaj, że obrazy są jednorazowe, więc musisz przypisać wynik zmiany rozmiaru do deklaracji using (lub możesz spróbować w końcu i upewnić się, że zadzwonisz do dispose w swoim final).
źródło
Kiedy rysujesz obraz za pomocą GDI +, moim zdaniem skaluje się on całkiem dobrze. Możesz użyć tego do stworzenia skalowanego obrazu.
Jeśli chcesz przeskalować swój obraz za pomocą GDI +, możesz zrobić coś takiego:
źródło
new Size
w deklaracjiscaled
:new Bitmap(original.Width * 4, original.Height * 4);
Przetestowane biblioteki, takie jak Imagemagick i GD są dostępne dla platformy .NET
Możesz także poczytać o interpolacji dwusześciennej i napisać własną.
źródło
Artykuły CodeProject omawiające i udostępniające kod źródłowy do skalowania obrazów:
źródło
Użyj tej biblioteki: http://imageresizing.net
Przeczytaj artykuł autora biblioteki: 20 pułapek rozmiaru obrazu w .NET
źródło
Wypróbuj różne wartości Graphics.InterpolationMode. W GDI + dostępnych jest kilka typowych algorytmów skalowania. Jeśli jeden z nich jest wystarczający dla Twoich potrzeb, możesz wybrać tę trasę zamiast polegać na zewnętrznej bibliotece.
źródło
Możesz wypróbować dotImage , jeden z produktów mojej firmy, który zawiera obiekt do ponownego próbkowania obrazów, który ma 18 typów filtrów dla różnych poziomów jakości.
Typowe użycie to:
ponadto dotImage zawiera 140 dziwnych poleceń przetwarzania obrazu, w tym wiele filtrów podobnych do tych w PhotoShop, jeśli tego właśnie szukasz.
źródło
To może pomóc
Zwróć uwagę na
InterpolationMode.HighQualityBicubic
-> jest to ogólnie dobry kompromis między wydajnością a wynikami.źródło
Wypróbuj ten podstawowy fragment kodu:
źródło
Jest artykuł o Code Project o używaniu GDI + dla .NET do zmiany rozmiaru zdjęć przy użyciu, powiedzmy, interpolacji dwusześciennej.
Był też inny artykuł na ten temat na innym blogu (chyba pracownik MS), ale nigdzie nie mogę znaleźć linku. :( Może ktoś inny może to znaleźć?
źródło
możesz wypróbować ten, jeśli jest to filtr obrazu 2D cgi lowres
źródło
To jest artykuł, który zauważyłem w kodzie Paint.NET do ponownego próbkowania obrazu: Różne proste techniki przetwarzania obrazu autorstwa Paula Bourke'a.
źródło
Możesz spróbować magicznego jądra . Daje mniej artefaktów pikselizacji niż dwukolorowe ponowne próbkowanie podczas skalowania w górę, a także daje bardzo dobre wyniki podczas zmniejszania skali. Kod źródłowy jest dostępny w języku C # w witrynie sieci Web.
źródło
Mam trochę poprawy w odpowiedzi doktora Jonesa.
Działa dla tego, kto chciał proporcjonalnie zmienić rozmiar obrazu. Sprawdził się i zadziałał dla mnie.
Metody klasy I dodane:
i nowe dostępne według tych kodów:
źródło