Как с помощью C# обрезать картинку?

  • Автор темы Автор темы shifu
  • Дата начала Дата начала

shifu

Client
Регистрация
04.04.2011
Сообщения
168
Реакции
23
Баллы
18
Собственно вопрос в названии топа. Спасибо.
 
Собственно вопрос в названии топа. Спасибо.
Как тебе её обрезать надо?
Вот очень простой пример кода:
JavaScript:
Развернуть Свернуть Копировать
var img = new Bitmap(20, 10);

var result = new Bitmap(10, 10);

for (int i = 0; i < img.Width; i++)
     for (int j = 0; j < img.Height; j++)
          result.SetPixel(i, j, img.GetPixel(i + 10, j));

из изображения 20x10 получает 10x10 причем новое изображение это правая часть (10x10) от изображения 20x10
 
Я не прогер, пожалуйста покажи куда ставить адрес и имя файла?
 
Скрипт должен брать файл C:\1.jpg. Вырезать кусок картинки по заданным координатам. Сохранить в файл С:\2.jpg.
Примерно такой результат хочу. :rolleyes:
rose.gif crop.gif
 
  • Оценить
Реакции: LightWood
Скрипт должен брать файл C:\1.jpg. Вырезать кусок картинки по заданным координатам. Сохранить в файл С:\2.jpg.
Примерно такой результат хочу. :rolleyes:
Посмотреть вложение 5034 Посмотреть вложение 5035

Вообще просто:
JavaScript:
Развернуть Свернуть Копировать
var img = new Bitmap(Image.FromFile(@"C:\1.jpg"));

int x1 = 10;
int x2 = 50;
int y1 = 10;
int y2 = 50;

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(@"C:\2.jpg")
где (x1, y1) - координаты левой верхней точки, а (x2, y2) - координаты нижней правой точки прямоугольника старого изображения который должен стать новой картинкой.
В коде заданы вот так:
JavaScript:
Развернуть Свернуть Копировать
int x1 = 10;
int x2 = 50;
int y1 = 10;
int y2 = 50;
 
Для пакетной обработки картинок есть бесплатная программа "FastStone Image Viewer". Можно сразу и обрезать и добавлять рамки и еще много чего. В общем может будет полезной.
 
Большое спасибо всем ответившим! shade - тебе отдельное спасибо, скрипт работает. :cool:
 
Снова хочу поднять данный вопрос c нарезкой.
есть картинка
телефон 3.png
ее нужно порезать на 3 части, т.е. каждый номер отдельно чтоб был. Но бывает номера 2 или вобще 1 и соответственно высота картинки меняется.
Как на C# замутить чтобы он автоматически исходя из высоты картинки понимал на сколько частей ее порезать ?
 
актуально прошу помощи
 
Снова хочу поднять данный вопрос c нарезкой.
есть картинка
Посмотреть вложение 5634
ее нужно порезать на 3 части, т.е. каждый номер отдельно чтоб был. Но бывает номера 2 или вобще 1 и соответственно высота картинки меняется.
Как на C# замутить чтобы он автоматически исходя из высоты картинки понимал на сколько частей ее порезать ?
ПРосто порезать каждый символ устроит?
 
  • Оценить
Реакции: frion-seo
просто по символам не нужно, нужно тупо на 3 части чтоб каждый нормер был отдельно ....
 
заплачу, ребята тока помогите
 
Нуууу тут в воздухе запахло котоаватарками))))))))
 
  • Оценить
Реакции: Ribas и frion-seo
просто по символам не нужно, нужно тупо на 3 части чтоб каждый нормер был отдельно ....
Код:
Развернуть Свернуть Копировать
int h = Convert.ToInt32(project.Variables["height"].Value);

var img = new Bitmap(Image.FromFile(@"C:\телефон 3.png"));

int count = img.Height / h;

for (int k = 0; k < count; k++)
{
    Bitmap result = new Bitmap(img.Width, h);
    for (int i = 0; i < img.Width; i++)
        for (int j = 0; j < h; j++) result.SetPixel(i, j, img.GetPixel(i, (h * k) + j));
    result.Save(String.Format(@"C:\{0}.png", k + 1));
}

где {-Variable.height-} это ширина новых картинок
 
  • Оценить
Реакции: frion-seo
ну вот((((( тогда уж и добью что высота 20 пикселей(((
 
  • Оценить
Реакции: frion-seo
если картинки черно-белые - я бы шел в цикле while и проверял наличие черных пикселей в строке. Если есть черный пиксель - копируем всю строку в новую картинку. Если нет - сохраняем старую, чистим переменную новой картинки и продолжаем заново искать черные пиксели. Так хоть 1000 номеров 1-й картинкой закинь - все должно поделить
 
  • Оценить
Реакции: frion-seo
А подскажите, есть возможность на C# на фото, кидать ватемарку или просто текст? в рандомном положении снизу от лева до права+ рандомный наклон небольшой+ чтобы фотка всегда бралась и рандомно меняла размерчик?
 
А подскажите, есть возможность на C# на фото, кидать ватемарку или просто текст? в рандомном положении снизу от лева до права+ рандомный наклон небольшой+ чтобы фотка всегда бралась и рандомно меняла размерчик?
http://stackoverflow.com/questions/1949526/adding-a-watermark-image-to-an-image
 
И так проблема следующая - резать картинки вроде научился нормально) Вот только проблема еще одна.
Как на C# перед тем как резать картинку, получить ее размеры ?
Для примера в прикрепленной картинке снизу мне нужно отрезать последний абзац.

накопал вот такой код, но применить его хз как.. не выходит... что вставлять вместо Filename не пойму
Код:
Развернуть Свернуть Копировать
 FileInfo file = new FileInfo(Filename);
lbl_FileSize.Text = file.Length.ToString(Filename);
using (System.Drawing.Image objImage = System.Drawing.Image.FromFile(Filename))
{
           lbl_ImageWidth.Text = objImage.Width.ToString();
           lbl_ImageHeight.Text = objImage.Height.ToString();
}
 

Вложения

  • 1.jpg
    1.jpg
    101,6 KB · Просмотры: 39
Последнее редактирование:
Мужики помогите плиз.. вся работа встала..
 
Как получить размеры картинки в С. Может кому пригодится. Если нет изображения или оно пустое возвращает fail.
Код:
Развернуть Свернуть Копировать
//string FileName = @"C:\1.jpg";
string FileName = project.Variables["path_to_img"].Value;
System.Drawing.Image objImage = System.Drawing.Image.FromFile(FileName);
var ImageWidth = objImage.Width.ToString();
var ImageHeight = objImage.Height.ToString();
return ImageWidth;
//return ImageHeight;
 
Последнее редактирование:
  • Оценить
Реакции: nomarketing
var img = new Bitmap(Image.FromFile(@"C:\1.jpg"));

int x1 = 10;
int x2 = 50;
int y1 = 10;
int y2 = 50;

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(@"C:\2.jpg")

Здравстуйте. Хотел обрезать картинку с авито, чтобы убрать водяной знак, пытаюсь это сделать, есть готовый вариант?
Добавил этот код в экш c#
вышла ошибка для переменных img, result не найдены вызовы метода Dispose()
в чем причина не подскажите?
 
Пробую ошибку выдает также, а куда нужно добавить?
 

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