Entwickler-Ecke
WinForms - Image zuschneiden
Delete - So 26.06.11 19:17
Titel: Image zuschneiden
Hallo Leute,
suche schon seit sehr langer Zeit einen Weg um ein Image zuzuschneiden, habe auch im Netz dazu einen tollen Code gefunden gehabt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| Bitmap source; private void button1_Click(object sender, EventArgs e) { OpenFileDialog o = new OpenFileDialog();
if (o.ShowDialog() == DialogResult.OK) { source = new Bitmap(o.FileName); pictureBox1.Image = source; } }
private void Left_Right_Up_Down_numericUpDowns_ValueChanged(object sender, EventArgs e) { if (pictureBox1.Image != null) { pictureBox1.Image = CropBitmap(source, 0, 0, source.Width - (int)Left.Value, source.Height - (int)Up.Value); } }
public Bitmap CropBitmap(Bitmap bitmap, int cropX, int cropY, int cropWidth, int cropHeight) { Rectangle rect = new Rectangle(cropX, cropY, cropWidth, cropHeight); Bitmap cropped = bitmap.Clone(rect, bitmap.PixelFormat); return cropped; } |
nur leider schneidet dieser Code immer zwei Seiten, also entweder links und rechts oder oben und unten, weiß Jemand wie ich es schreiben muss das ich auswählen kann das das Programm immer nur eine Seite schneidet ?
Liebe Grüße BleachRukia
Christian S. - So 26.06.11 19:27
Irgendwie verstehe ich die Frage nicht, aber über die Parameter bei CropBitmap wählst Du Dir auch aus, welches Rechteck vom Bitmap übrig bleiben soll. Da hast Du doch alle Freiheiten :nixweiss:
Delete - So 26.06.11 19:42
Hallo,
was genau an meiner Frage verstehst du nicht ?
Ich konnte jetzt nur aus dem Code heraus erkennen das ich angeben kann das ich entweder nur die Breite oder die Höhe schneiden kann, habe aber leider nichts gefunden wo ich genau sagen kann schneide mir jetzt nur die Linke Seite oder die Rechte des Bildes etc.
Liebe Grüße BleachRukia
Christian S. - So 26.06.11 19:47
Du kannst über die Parameter von CropBitmap genau sagen, was geschnitten werden soll. Von dem Rechteck, was vom Bild übrig bleiben soll, gibst Du die obere, linke Ecke an und dann die Länge und Breite.
Delete - So 26.06.11 19:53
Hallo,
wen ich versuche cropX oder cropyY einen anderen Wert als 0 zu geben bekomme ich die Fehlermeldung das nicht genügend Speicher vorhanden ist, und dann bleiben ja nur noch cropWidth und cropHeight übrig aber diese ändern immer nur beide Seiten :( oder habe ich dich jetzt falsch verstanden ?
Kannst du mir mal ein Code Beispiel geben, Theorie ist nicht meine Stärke :(
Liebe Grüße BleachRukia
Delete - So 26.06.11 21:35
Hallo,
aber wenn cropX und cropY nur für die Position des Bildes stehen wie kann ich dann mit ihnen ein Bild an allen Seiten schneiden ?
Liebe Grüße BleachRukia
Christian S. - So 26.06.11 21:41
In dem Du cropWidth und cropHeight entsprechend setzt. Wenn Du links und rechts und oben und unten 10 Pixel wegschneiden willst, ist
- cropX und cropY = 10 Pixel
- cropWidth und cropHeight = Höhe/Breite des Bildes - 20 Pixel
Delete - So 26.06.11 21:48
Hallo,
wieso sind es bei cropWidth und cropHeight nicht auch 10 Pixel ?
Habe jetzt mal einen Test gemacht, wenn ich erst cropWidth auf 10 stelle und danach cropX dann kommt keine Fehlermeldung, dann schneidet das Programm richtig :), oder mache ich da jetzt etwas falsch !?
Liebe Grüße BleachRukia
Christian S. - So 26.06.11 21:55
BleachRukia hat folgendes geschrieben : |
wieso sind es bei cropWidth und cropHeight nicht auch 10 Pixel ? |
Wenn ich die Breite des Rechtecks, das ich ausschneide, um 10 Pixel kleiner als die des Bildes mache und das Rechteck dann um 10 Pixel nach rechts verschiebe (durch cropX = 10 Poxel), dann wäre die rechte Kante des Rechtecks genau an der rechten Bildkante. Ich will ja aber auch rechts was abschneiden, also muss ich 20 Pixel (= 2 * 10 Pixel) nehmnen.
BleachRukia hat folgendes geschrieben : |
Habe jetzt mal einen Test gemacht, wenn ich erst cropWidth auf 10 stelle und danach cropX dann kommt keine Fehlermeldung, dann schneidet das Programm richtig :), oder mache ich da jetzt etwas falsch !? |
Was heißt "erst", die Parameter setzt Du doch im selben Aufruf.
Delete - So 26.06.11 22:58
Hallo,
ich glaube ich habe es jetzt gelöst :)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private void Schneiden_ValueChanged(object sender, EventArgs e) { ImageInput = new Bitmap(pictureBox1.ImageLocation); pictureBox1.Image = ImageCut(ImageInput, (int)Left.Value, (int)Up.Value, (int)Right.Value + (int)Left.Value, (int)Down.Value + (int)Up.Value); }
public Bitmap ImageCut(Bitmap bitmap, int xPosition, int yPosition, int Width, int Heigth) { Rectangle Rechteck = new Rectangle(xPosition, yPosition, ImageInput.Width - Width, ImageInput.Height - Heigth); Bitmap Output = bitmap.Clone(Rechteck, bitmap.PixelFormat); return Output; } |
Ich habe es jetzt so gemacht das ich immer wenn xPosition oder yPosition verändert wird, immer der Wert zur Width oder Heigth dazu addiert wird, auf den ersten Blick sieht es so aus als würde jetzt alles richtig funktionieren und schneiden :)
Ist dieser Code hier so korrekt oder habe ich etwas falsch gemacht ?
Liebe Grüße BleachRukia
Christian S. - So 26.06.11 23:03
Ja, schaut gut aus :-)
Delete - So 26.06.11 23:11
Hallo,
lustig, meine Lösung war jetzt einfach nur geraten, ich hatte nähmlich gemerkt gehabt das ich erst links und unten Schneiden kann wenn ich rechts und oben schon etwas stehen habe, sozusagen der MinWert.
Lustig das das jetzt auch noch wirklich funktioniert hat :)
Aber ohne deine Tipps wäre ich da niemals drauf gekommen, vielen vielen dank :D
Liebe Grüße BleachRukia
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!