2010-05-24 3 views
2

, как указано в теме, у меня есть изображение:C# изображения кадрирование, расщепление, сохранение

private Image testing; 
    testing = new Bitmap(@"sampleimg.jpg"); 

Я хотел бы разделить его на 3 х 3 матрицы, означающего 9 изображений в целом и сохранить it.Any советы или трюки, чтобы сделать это просто? Я использую визуальные студии 2008 года и работаю на смарт-устройствах. Пробовал несколько способов, но я не могу это получить. Это то, что я пробовал:

 int x = 0; 
     int y = 0; 
     int width = 3; 
     int height = 3; 


     int count = testing.Width/width; 
     Bitmap bmp = new Bitmap(width, height); 


     Graphics g = Graphics.FromImage(bmp); 


     for (int i = 0; i < count; i++) 
     { 
      g.Clear(Color.Transparent); 
      g.DrawImage(testing, new Rectangle(0, 0, width, height), new Rectangle(x, y, width, height), GraphicsUnit.Pixel); 
      bmp.Save(Path.ChangeExtension(@"C\AndrewPictures\", String.Format(".{0}.bmp",i))); 
      x += width; 
     } 
+0

Я тоже пробовал это: string path = @ "C \ AndrewPictures"; bmp.Save (Path.ChangeExtension (путь, String.Format (". {0} .bmp", i))); , но я получаю Ошибка \t \t 1 Нет перегрузки метода «Сохранить» принимает аргументы «1» – cheesebunz

ответ

8

В зависимости от версии .NET, вы можете сделать одно из следующих действий для посева:

.NET 2.0

private static Image cropImage(Image img, Rectangle cropArea) 
{ 
    Bitmap bmpImage = new Bitmap(img); 
    Bitmap bmpCrop = bmpImage.Clone(cropArea, 
    bmpImage.PixelFormat); 
    return (Image)(bmpCrop); 
} 

Или .NET 3.5+

// Create an Image element. 
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 

Как вы можете видеть, это немного проще, чем то, что вы делаете. Первый пример клонирует текущее изображение и принимает его подмножество; второй пример использует CroppedBitmap, который поддерживает выбор участка изображения прямо из конструктора.

Расщепляющая часть - это простая математика, просто разбивающая изображение на 9 наборов координат и передавая их в конструктор.

+0

+1 для кадрирования с помощью Bitmap.Clone, это то, что я использую, чтобы извлечь небольшие регионы из изображений для ROI дисплея и этим работает хорошо. – allonym

+0

да я зашел на этот сайт http://www.switchonthecode.com/tutorials/csharp-tutorial-image-editing-saving-cropping-and-resizing Я думаю, что буду придерживаться своего метода, Я не могу сохранить изображения ... – cheesebunz

+0

И crop cropImage.Margin = new Толщина (5); означает ли это высота? У меня нет метода, мне не хватает ссылки? – cheesebunz

Смежные вопросы