Autor Beitrag
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 26.06.11 19:17 
Hallo Leute,

suche schon seit sehr langer Zeit einen Weg um ein Image zuzuschneiden, habe auch im Netz dazu einen tollen Code gefunden gehabt:

ausblenden 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, 00, 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 26.06.11 20:13 
user profile iconBleachRukia hat folgendes geschrieben Zum zitierten Posting springen:
wen ich versuche cropX oder cropyY einen anderen Wert als 0 zu geben bekomme ich die Fehlermeldung das nicht genügend Speicher vorhanden ist,

Wenn Du cropX und cropY größer machst, musst Du die Breite und Höhe des Rechtecks verringern, damit Du es nicht über den Bildrand hinaus schiebst.

user profile iconBleachRukia hat folgendes geschrieben Zum zitierten Posting springen:
Kannst du mir mal ein Code Beispiel geben, Theorie ist nicht meine Stärke :(
Ich glaube, es Dir zu erklären, bringt Dich langfristig weiter. Ich habe mal eine Zeichnung gemacht, wie die Parameter bei CropBitmap zu verstehen sind:

crop
Einloggen, um Attachments anzusehen!
_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".

Für diesen Beitrag haben gedankt: Kha
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 26.06.11 21:55 
user profile iconBleachRukia hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconBleachRukia hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 26.06.11 22:58 
Hallo,

ich glaube ich habe es jetzt gelöst :)

ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 26.06.11 23:03 
Ja, schaut gut aus :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
BleachRukia
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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