Обрезка изображений

liveCreature

Пользователь
Регистрация
22.01.2017
Сообщения
87
Благодарностей
10
Баллы
8
Здравствуйте. Каким образом моно обрезать изображение без потери качества и веса? Если ставлю качество 100 то вес становится в 5 раз больше, а качество и того хуже.
После нескольких обрезок качество ухудшается почти в 2 раза при том что стоит качество 100.
Как быть в этой нелёгкой ситуации :-)

Нужно просто обрезать по 60 пиксилей сверх и снизу картинки.
 

liveCreature

Пользователь
Регистрация
22.01.2017
Сообщения
87
Благодарностей
10
Баллы
8
Решение нашёл здесь: http://zennolab.com/discussion/threads/kak-s-pomoschju-c-obrezat-kartinku.12645/
И немного изменил с божественной помощи:
Код:
var img = new Bitmap(Image.FromFile(@"{-Project.Directory-}\img\sddefault(1).jpg"));
int x1 = 0;
int x2 = 639;
int y1 = 60;
int y2 = 419;
int width = x2 - x1 + 1;
int height = y2 - y1 + 1;
var result = new Bitmap(width, height);
for (int i = x1; i <= x2; i++)
     for (int j = y1; j <= y2; j++)
          result.SetPixel(i - x1, j - y1, img.GetPixel(i, j));
result.Save(@"{-Project.Directory-}\img\123.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
На конце автор забыл указать ; из за чего многие писали ошибку. А System.Drawing.Imaging.ImageFormat.Jpeg это формат чтоб пикча весила не больше оригинала.
 

liveCreature

Пользователь
Регистрация
22.01.2017
Сообщения
87
Благодарностей
10
Баллы
8
Но появилась другая проблема. Код работает если установлены свои координаты выше на картинку 640х480.
Как только картинка меняет размеры, то код не срабатывает видимо из за ошибочных координат.

Вопрос: как изменить код чтоб просто стирал сверху 60 пикселей и снизу 60? Тогда всё должно работать на любой размер картинки.
 

liveCreature

Пользователь
Регистрация
22.01.2017
Сообщения
87
Благодарностей
10
Баллы
8
Друг помог в проблеме за что ему спасибо, делюсь если кому нужно:
Код:
// obrezka iz 4-3 v 16-9
var img = new Bitmap(Image.FromFile(@"{-Project.Directory-}\img\333.jpg"));
int NewSizeY = img.Width*9 / 16;
if (NewSizeY > img.Height)
    NewSizeY = img.Height;
int Yoffs = (img.Height - NewSizeY) / 2;
var result = new Bitmap(img.Width, NewSizeY);
for (int i = 0; i < img.Width; i++)
     for (int j = 0; j < NewSizeY; j++)
          result.SetPixel(i, j, img.GetPixel(i, j+Yoffs));
        
result.Save(@"{-Project.Directory-}\img\1233.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
Обрезает сверху и снизу ~60 пиксилей.
 
  • Спасибо
Реакции: phoenixs и Sergodjan

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)