Обрезать картинку с помощью С# или js

Aleksandr

Client
Регистрация
04.01.2014
Сообщения
206
Благодарностей
113
Баллы
43
Доброе утро )

Помогите решить проблему с обрезкой картинок на С# или js, пожалуйста)

Искал на форуме решения для обрезки картинок, нашел несколько решений:
Первый на js http://zennolab.com/discussion/threads/kak-s-pomoschju-c-obrezat-kartinku.12645/#post-74782 но почему то у меня не работает
Код:
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# http://stackoverflow.com/questions/734930/how-to-crop-an-image-using-c этот вариант тож не работает
Код:
var filename = @"C:\1.JPG";
var img = Image.FromFile(filename);
var rect = new Rectangle(new Point(0, 0), img.Size);
var cloned = new Bitmap(img).Clone(rect, img.PixelFormat);
var bitmap = new Bitmap(cloned, new Size(250, 250));
cloned.Dispose();
Первое решение на js более функциональней так можно задать сколько обрезать пикселей с каждой стороны. Во втором просто новый размер задается как я понял... Мне нужно обрезать с каждой стороны по несколько пикселей. Картинки формат.jpg

Помогите собрать код для обрезки картинки или помогите готовым решением если у кого есть
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Справа:
Код:
int size = 500; // Сколько обрезать.
            Bitmap bmp = new Bitmap("001.png"); // Загружаемый файл.
            Bitmap bm = new Bitmap(bmp.Width - size, bmp.Height);
            for (int i = 0; i < bmp.Width - size; i++)
            {
                for (int j = 0; j < bmp.Height; j++)
                    bm.SetPixel(i, j, bmp.GetPixel(i, j));
            }
            bm.Save("resul.png"); // Сохраняемый файл.
            bmp.Dispose();
            bm.Dispose();
Слева:
Код:
int size = 500;
            int p = size - 1;
            Bitmap bmp = new Bitmap("001.png");
            Bitmap bm = new Bitmap(bmp.Width - size, bmp.Height);
            for (int i = 0; i < bmp.Width - size; i++)
            {
                p++;
                for (int j = 0; j < bmp.Height; j++)
                    bm.SetPixel(i, j, bmp.GetPixel(p, j));
            }
            bm.Save("resul.png");
            bmp.Dispose();
            bm.Dispose();
Сверху:
Код:
int size = 500;
            int p = size;
            Bitmap bmp = new Bitmap("001.png");
            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("resul.png");
            bmp.Dispose();
            bm.Dispose();
Снизу:
Код:
int size = 500;
            Bitmap bmp = new Bitmap("001.png");
            Bitmap bm = new Bitmap(bmp.Width, bmp.Height - size);
            for (int i = 0; i < bmp.Width; i++)
            {
                for (int j = 0; j < bmp.Height - size; j++)
                    bm.SetPixel(i, j, bmp.GetPixel(i, j));
            }
            bm.Save("resul.png");
            bmp.Dispose();
            bm.Dispose();
 

Aleksandr

Client
Регистрация
04.01.2014
Сообщения
206
Благодарностей
113
Баллы
43
Этот тоже не работает, не пойму что за...
Может я что не то делаю? Вот мои действия, вставлью код в экшен js и прописывая путь до картинки, все это сделал. Что я мог упустить?

Путь до картинки прописываю вот так "C:/1.jpg"
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
Это код C#. Путь нужно указывать так: @"C:/1.jpg" или так: "C://1.jpg"
 
  • Спасибо
Реакции: Aleksandr

kyvour

Активный пользователь
Регистрация
17.05.2014
Сообщения
186
Благодарностей
36
Баллы
28
Код:
for (int i = 0; i < bmp.Width; i++)
            {
                for (int j = 0; j < bmp.Height - size; j++)
                    bm.SetPixel(i, j, bmp.GetPixel(i, j));
            }
это не самый лучший вариант - перебирать по пикселю. Есть же готовые методы в с#
 

Irbis

Client
Регистрация
02.03.2014
Сообщения
195
Благодарностей
120
Баллы
43
это не самый лучший вариант - перебирать по пикселю. Есть же готовые методы в с#
Подскажите, какие методы обрезают картинку, не перебирая по пикселю изображение?
 

kyvour

Активный пользователь
Регистрация
17.05.2014
Сообщения
186
Благодарностей
36
Баллы
28
http://msdn.microsoft.com/en-us/library/ms752345(v=vs.110).aspx

Если коротко, то вот пример
Код:
Image croppedImage = new Image();
croppedImage.Width = 200;
croppedImage.Margin = new Thickness(5);

// Create a CroppedBitmap based off of a xaml defined resource.
CroppedBitmap cb = new CroppedBitmap(    
   (BitmapSource)this.Resources["masterImage"],
   new Int32Rect(30, 20, 105, 50));       //select region rect
croppedImage.Source = cb;                 //set image source to cropped
Смысл такой, что холст делается меньше чем само изображение. Потом изображение накладывается на это холст и сохраняется. Все что не попало на холст - не сохранится
 
  • Спасибо
Реакции: Wide

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 651
Благодарностей
655
Баллы
113
Вот обрезает сниппет фото со всех сторон, не оставляя первоначальное
Код:
\\берет путь фото, обрезает со всех сторон по r_N пикселей,заменяя на первоначальный файл
string imagePath = project.Variables["puth"].Value;
int left = Convert.ToInt32(project.Variables["r_1"].Value);
int top = Convert.ToInt32(project.Variables["r_2"].Value);
int right = Convert.ToInt32(project.Variables["r_3"].Value);
int bottom = Convert.ToInt32(project.Variables["r_4"].Value);
Image imgNew;

using(Image img = Image.FromFile(imagePath)){
    imgNew = ((Bitmap)img).Clone(new Rectangle(left, top, img.Width - right - left, img.Height - bottom - top),img.PixelFormat);
}
imgNew.Save(imagePath);
 
Последнее редактирование:

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