2012-02-28 8 views
14

Nie mam pojęcia, jak wyciąć prostokątny obraz z innego dużego obrazu, .Jak wyciąć część obrazu w języku C#

Załóżmy, że istnieje 300 x 600 image.png.

Chcę tylko wyciąć prostokąt z X: Y 10 20 z 200, wysokość 100 i zapisać go w innym pliku.

Jak mogę to zrobić w języku C#?

Dzięki!

+0

@Brian - dodaj to jako odpowiedź (być może z cytowanym/przywołanym kodem), abyśmy mogli zagłosować. – RQDQ

+0

Czy twój obraz ma przezroczyste części? Łącze Briana nie pomoże, jeśli potrzebujesz przejrzystości, ponieważ bitmapy go nie obsługują. – Msonic

+0

@Msonic No it doesnt –

Odpowiedz

22

Sprawdź na stronie MSDN numer Graphics Class.

Oto przykład, który skieruje Cię we właściwym kierunku (zauważ obiekt Rectangle):

public Bitmap CropImage(Bitmap source, Rectangle section) 
{ 
// An empty bitmap which will hold the cropped image 
Bitmap bmp = new Bitmap(section.Width, section.Height); 

Graphics g = Graphics.FromImage(bmp); 

// Draw the given area (section) of the source image 
// at location 0,0 on the empty bitmap (bmp) 
g.DrawImage(source, 0, 0, section, GraphicsUnit.Pixel); 

return bmp; 
} 

// Example use:  
Bitmap source = new Bitmap(@"C:\tulips.jpg"); 
Rectangle section = new Rectangle(new Point(12, 50), new Size(150, 150)); 

Bitmap CroppedImage = CropImage(source, section); 
16

Innym sposobem corp obraz byłby do klonowania obrazu z określonych punktów wyjściowych i wielkości.

int x= 10, y=20, width=200, height=100; 
Bitmap source = new Bitmap(@"C:\tulips.jpg"); 
Bitmap CroppedImage = source.Clone(new System.Drawing.Rectangle(x, y, width, height), source.PixelFormat); 
+1

Jest to o wiele lepsza odpowiedź, ponieważ nie wymaga załadowania zewnętrznego zestawu, takiego jak 'Grafika', aby osiągnąć cel! – Andry

+0

Po wykonaniu klonowania, możesz wywołać funkcję dispose() źródła (source.Dispose();), jeśli chcesz zwolnić dowolne uchwyty do oryginalnej bitmapy. jeśli chcesz usunąć oryginalny obraz na przykład i zachować tylko przyciętą wersję, będziesz musiał wywołać funkcję dispose() przed usunięciem oryginalnego obrazu. na wypadek, gdyby ktoś chciał wykonać tę operację. – Alexei

+0

Rozwiązanie graficzne jest znacznie szybsze niż klonowanie, wolałbym trzymać się z daleka od klonowania bitmap, ponieważ nie jest to głęboki klon. I nie jestem pewien, czy twój dispose będzie działał w tej sytuacji, obie mapy bitowe będą używać tych samych danych pikseli –