Обрезка картинки - как убрать 10%

soprano

Client
Регистрация
25.08.2011
Сообщения
796
Благодарностей
840
Баллы
93
Есть картинка (много картинок) с водяным знаком внизу на 10% высоты картинки.
Нужен сниппет c# чтобы отрезал указанное количество %% от низа картинки и сохранял её в новом размере.
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 441
Благодарностей
1 287
Баллы
113
Есть картинка (много картинок) с водяным знаком внизу на 10% высоты картинки.
Нужен сниппет c# чтобы отрезал указанное количество %% от низа картинки и сохранял её в новом размере.
1. Такой вариант не подошел?
2. Либо такой вариант.
3. Или такой вариант
4. Или кубиком:
68518
 
Последнее редактирование:
  • Спасибо
Реакции: soprano

soprano

Client
Регистрация
25.08.2011
Сообщения
796
Благодарностей
840
Баллы
93
Вот к чему пришёл:
C#:
string path = project.Directory + @"/images/";
            
            var List = project.Lists["images"];
            
//            получаем список файлов в папке
            string supportedExtensions = "*.jpg,*.gif,*.png,*.bmp,*.jpe,*.jpeg,*.wmf,*.emf,*.xbm,*.ico,*.eps,*.tif,*.tiff,*.g01,*.g02,*.g03,*.g04,*.g05,*.g06,*.g07,*.g08";
            foreach (string imageFile in Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Where(s => supportedExtensions.Contains(Path.GetExtension(s).ToLower())))
            {
                List.Add(imageFile);
            }
            
            Random rnd = new Random();
            string name = rnd.Next(1, 1000).ToString() + ".jpg";
            
            string RandPathPhoto = string.Empty;// переменная под рандомную фотку   
                        
            for(int x = 0; x < List.Count; x++){
            RandPathPhoto = List[0];// выбираем первую фотку
            
            //обрезка сверху
            int size = 200;
                    int p = size;
                    Bitmap bmp = new Bitmap(RandPathPhoto);
                    Bitmap bm = new Bitmap(bmp.Width, bmp.Height - size);
              
             for (int i = 0; i < bmp.Width; i++)
           {
                p = size - 1;
                for (int j = 0; j < bmp.Height - size; j++)
                {
                    p++;
                    bm.SetPixel(i, j, bmp.GetPixel(i, p));
                }
            }
                    bm.Save(path + name, System.Drawing.Imaging.ImageFormat.Jpeg);
                    bmp.Dispose();
                    bm.Dispose();
            List.Remove(RandPathPhoto);
            }
Но где-то промахнулся, обрабатывает и сохраняет только 1-ю картинку из списка, потом виснет.
Подскажите, где я намудрил с циклом.
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
18 строка:
Вместо RandPathPhoto = List[0] нужно RandPathPhoto = List[х] ?
и 38 стороку я бы закомментировал.
 
Последнее редактирование:

soprano

Client
Регистрация
25.08.2011
Сообщения
796
Благодарностей
840
Баллы
93
18 строка:
Вместо RandPathPhoto = List[0] нужно RandPathPhoto = List[х] ?
и 38 стороку я бы закомментировал.
Неа, то же самое.
Думаю разницы нет
C#:
RandPathPhoto = List[0] нужно RandPathPhoto = List[х]
если в конце цикла строка
C#:
RandPathPhoto = List[0]
удаляется
C#:
List.Remove(RandPathPhoto);
Все равно только первый файл обрезает и всё.
 

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