Как изменить размер и обрезать изображение в С#? ⇐ C#
-
Anonymous
Как изменить размер и обрезать изображение в С#?
У меня есть функция, которая принимает растровое изображение и создает плакат при масштабировании изображения. Ниже приведен мой код, который создает фиксированную страницу и добавляет к ней часть изображения.
private FixDocument CreateMultiplePages(BitmapImage растровое изображение) { ФиксированныйДокумент фиксированныйДокумент = новый ФиксированныйДокумент(); int rowsCount = rows > 0? ряды: 1; int colsCount = столбцы > 0? столбцы: 1; двойной PageWidth = (double)document.PageWidth; двойной PageHeight = (double)document.PageHeight; for (int row = 0; row < rowsCount; row++) { for (int col = 0; col < colsCount; col++) { фиксированная страница фиксированная страница = новая фиксированная страница (); фиксированная страница.Ширина = (двойной)документ.PageWidth; фиксированная страница.Высота = (двойной)документ.Высота страницы; Изображение System.Windows.Controls.Image = новый System.Windows.Controls.Image { Источник = растровое изображение, Растянуть = Растянуть.Заполнить, Ширина = (двойной)документ.ImageScaledWidth, Высота = (двойной)документ.ImageScaledHeight, Margin = new Thickness(-col * PageWidth, -row * PageHeight, 0, 0) // Смещение изображения }; фиксированная страница.Дети.Добавить(изображение); PageContent pageContent = новый PageContent(); ((IADChild)pageContent).AddChild(fixedPage); фиксированныйDocument.Pages.Add(pageContent); } } вернуть фиксированный документ; } ImageScaledWidth и ImageScaledHeight рассчитываются как:
double totalPageWidth = (double)document.PageWidth * columns; двойной totalPageHeight = (double)document.PageHeight * rows; двойное соотношение = totalPageWidth / totalPageHeight; если (ImageRatio > соотношение) Масштаб изображения = общая ширина страницы / ширина изображения; еще Масштаб Изображения = TotalPageHeight/ImageHeight; document.ImageScaledWidth = (десятичное число) (ImageWidth * ImageScale); document.ImageScaledHeight = (десятичное число) (ImageHeight * ImageScale); Мне нужно изменить код таким образом, чтобы можно было изменить размер исходного изображения на document.ImageScaledWidth и document.ImageScaledHeight, не делая его размытым, и обрезать изображение до нужного размера для каждой страницы. Таким образом, я смогу добавлять поля на каждой странице вокруг изображения. Я попробовал несколько методов, но они делают изображение размытым. Что я могу сделать?
У меня есть функция, которая принимает растровое изображение и создает плакат при масштабировании изображения. Ниже приведен мой код, который создает фиксированную страницу и добавляет к ней часть изображения.
private FixDocument CreateMultiplePages(BitmapImage растровое изображение) { ФиксированныйДокумент фиксированныйДокумент = новый ФиксированныйДокумент(); int rowsCount = rows > 0? ряды: 1; int colsCount = столбцы > 0? столбцы: 1; двойной PageWidth = (double)document.PageWidth; двойной PageHeight = (double)document.PageHeight; for (int row = 0; row < rowsCount; row++) { for (int col = 0; col < colsCount; col++) { фиксированная страница фиксированная страница = новая фиксированная страница (); фиксированная страница.Ширина = (двойной)документ.PageWidth; фиксированная страница.Высота = (двойной)документ.Высота страницы; Изображение System.Windows.Controls.Image = новый System.Windows.Controls.Image { Источник = растровое изображение, Растянуть = Растянуть.Заполнить, Ширина = (двойной)документ.ImageScaledWidth, Высота = (двойной)документ.ImageScaledHeight, Margin = new Thickness(-col * PageWidth, -row * PageHeight, 0, 0) // Смещение изображения }; фиксированная страница.Дети.Добавить(изображение); PageContent pageContent = новый PageContent(); ((IADChild)pageContent).AddChild(fixedPage); фиксированныйDocument.Pages.Add(pageContent); } } вернуть фиксированный документ; } ImageScaledWidth и ImageScaledHeight рассчитываются как:
double totalPageWidth = (double)document.PageWidth * columns; двойной totalPageHeight = (double)document.PageHeight * rows; двойное соотношение = totalPageWidth / totalPageHeight; если (ImageRatio > соотношение) Масштаб изображения = общая ширина страницы / ширина изображения; еще Масштаб Изображения = TotalPageHeight/ImageHeight; document.ImageScaledWidth = (десятичное число) (ImageWidth * ImageScale); document.ImageScaledHeight = (десятичное число) (ImageHeight * ImageScale); Мне нужно изменить код таким образом, чтобы можно было изменить размер исходного изображения на document.ImageScaledWidth и document.ImageScaledHeight, не делая его размытым, и обрезать изображение до нужного размера для каждой страницы. Таким образом, я смогу добавлять поля на каждой странице вокруг изображения. Я попробовал несколько методов, но они делают изображение размытым. Что я могу сделать?
Мобильная версия