A Size
, Width
i Height
to Get()
właściwości System.Drawing.Image
;
Jak mogę zmienić rozmiar obiektu Image w czasie wykonywania w C #?
W tej chwili tworzę nowy Image
za pomocą:
// objImage is the original Image
Bitmap objBitmap = new Bitmap(objImage, new Size(227, 171));
Odpowiedzi:
Spowoduje to wykonanie wysokiej jakości zmiany rozmiaru:
wrapMode.SetWrapMode(WrapMode.TileFlipXY)
zapobiega duchom wokół granic obrazu - naiwna zmiana rozmiaru spowoduje próbkowanie przezroczystych pikseli poza granicami obrazu, ale poprzez odbicie lustrzane obrazu możemy uzyskać lepszą próbkę (to ustawienie jest bardzo zauważalne)destImage.SetResolution
utrzymuje DPI niezależnie od wielkości fizycznej - może poprawić jakość przy zmniejszaniu wymiarów obrazu lub podczas drukowaniagraphics.CompositingMode
określa, czy piksele z obrazu źródłowego mają nadpisywać, czy są łączone z pikselami tła.SourceCopy
określa, że renderowany kolor zastępuje kolor tła.graphics.CompositingQuality
określa poziom jakości renderowania obrazów warstwowych.graphics.InterpolationMode
określa sposób obliczania wartości pośrednich między dwoma punktami końcowymigraphics.SmoothingMode
określa, czy linie, krzywe i krawędzie wypełnionych obszarów używają wygładzania (zwanego również antyaliasingiem) - prawdopodobnie działa tylko na wektorachgraphics.PixelOffsetMode
wpływa na jakość renderowania podczas rysowania nowego obrazuUtrzymanie proporcji pozostawia się jako ćwiczenie dla czytelnika (właściwie nie sądzę, że zadaniem tej funkcji jest wykonanie tego za Ciebie).
Ponadto, jest to dobry artykuł opisujący niektóre z pułapek z zmiana rozmiaru obrazu. Powyższa funkcja obejmie większość z nich, ale nadal musisz martwić się o oszczędzanie .
źródło
Bitmap
jest w zasadzie tylko nazwą klasy, którą możesz zapisać jako dowolny typ pliku, jaki ci się podoba.System.Drawing
i dodaćusing System.Drawing.Imaging;
Nie jestem pewien, co jest w tym takiego trudnego, zrób to, co robiłeś, użyj przeciążonego konstruktora bitmap, aby utworzyć obraz o zmienionym rozmiarze, jedyne, czego Ci brakowało, to rzutowanie z powrotem na typ danych Obraz:
źródło
yourImage
przed przypisaniem go do nowego obrazu?w tym pytaniu będziesz miał kilka odpowiedzi, w tym moją:
źródło
Dlaczego nie skorzystać z tej
System.Drawing.Image.GetThumbnailImage
metody?Przykład:
Źródło: http://msdn.microsoft.com/en-us/library/system.drawing.image.getthumbnailimage.aspx
źródło
Możesz wypróbować net-vips , wiązanie C # dla libvips . Jest to leniwa, strumieniowa biblioteka przetwarzania obrazu sterowana na żądanie, dzięki czemu może wykonywać takie operacje bez konieczności ładowania całego obrazu.
Na przykład jest wyposażony w poręczną miniaturkę obrazu:
Obsługuje również inteligentne przycinanie, sposób inteligentnego określania najważniejszej części obrazu i utrzymywania ostrości podczas przycinania obrazu. Na przykład:
Gdzie
owl.jpg
jest kompozycja niecentralna:Daje ten wynik:
Najpierw zmniejsza obraz, aby uzyskać oś pionową do 128 pikseli, a następnie przycina do 128 pikseli za pomocą
attention
strategii. Ten przeszukuje obraz w poszukiwaniu funkcji, które mogą przyciągnąć ludzkie oko, zobaczSmartcrop()
szczegóły.źródło
To będzie -
//////////////
źródło
źródło
Low
?Ten kod jest taki sam, jak wysłany z jednej z powyższych odpowiedzi ... ale przekształci przezroczysty piksel na biały zamiast czarnego ... Dzięki :)
źródło
W aplikacji podjąłem konieczność utworzenia funkcji z wieloma opcjami. Jest dość duży, ale zmienia rozmiar obrazu, może zachować proporcje i może przycinać krawędzie, aby zwrócić tylko środek obrazu:
Aby ułatwić dostęp do funkcji, można dodać niektóre przeciążone funkcje:
Teraz ostatnie dwa booleany są opcjonalne do ustawienia. Wywołaj funkcję w ten sposób:
źródło
Kliknij tutaj http://bhupendrasinghsaini.blogspot.in/2014/07/resize-image-in-c.html
źródło
To jest kod, który opracowałem dla konkretnego wymagania, tj .: cel jest zawsze w proporcji poziomej. To powinno dać ci dobry początek.
źródło
Jeśli pracujesz z
BitmapSource
:Jeśli chcesz mieć lepszą kontrolę nad jakością, uruchom najpierw:
(Domyślnie jest
BitmapScalingMode.Linear
to odpowiednikBitmapScalingMode.LowQuality
.)źródło
Używam ImageProcessorCore, głównie dlatego, że działa .Net Core.
I ma więcej opcji, takich jak konwersja typów, przycinanie zdjęć i więcej
źródło
Zmień rozmiar i zapisz obraz, aby zmieścił się poniżej szerokości i wysokości, podobnie jak płótno, zachowując proporcje obrazu
źródło
Użyj funkcji poniżej z poniższym przykładem zmiany rozmiaru obrazu:
źródło
W tym celu możesz użyć frameworka Accord.NET . Zapewnia kilka różnych metod zmiany rozmiaru:
źródło
Uwaga: nie będzie to działać z ASP.Net Core, ponieważ WebImage zależy od System.Web, ale od poprzednich wersji ASP.Net korzystałem z tego fragmentu wiele razy i był on użyteczny.
źródło