Moin,
ich habe den ganzen Nachmittag gegoogelt, wie ich ein Bild mithilfe einer Matrix skalieren kann.
Dies ist mein bisheriger Code:
Spoiler anzeigen
Die Funktion
Und der Code, den ich gerade nicht auskommentiert habe, funktioniert nicht. Das gespeicherte Bild sieht genauso aus wie das Original.
ich habe den ganzen Nachmittag gegoogelt, wie ich ein Bild mithilfe einer Matrix skalieren kann.
Dies ist mein bisheriger Code:
C#-Quellcode
- private void x_scale()
- {
- PictureBox2.Image = null;
- using (CommonOpenFileDialog OFD = new CommonOpenFileDialog())
- {
- OFD.Title = "Datei zum Öffnen auswählen";
- OFD.Filters.Add(new CommonFileDialogFilter("Bilder", ".jpg;.jpeg;.bmp;.png"));
- if (System.IO.Directory.Exists(@"C:\Users\...\Pictures"))
- {
- OFD.InitialDirectory = @"C:\Users\...\Pictures";
- }
- else
- {
- OFD.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
- }
- CommonFileDialogResult result;
- this.Invoke((Action)(() =>
- {
- result = OFD.ShowDialog();
- if (result == CommonFileDialogResult.Ok)
- {
- Pfad_Bild = OFD.FileName;
- PictureBox2.Image = System.Drawing.Image.FromFile(OFD.FileName);
- zu_transformierendes_Bild = new Bitmap(Pfad_Bild);
- }
- else
- {
- return;
- }
- }));
- } // using Dialog
- int height = zu_transformierendes_Bild.Height;
- int width = zu_transformierendes_Bild.Width;
- double[,,] doubleArray = zu_transformierendes_Bild.ToMatrix(); //ToByteArray(zu_transformierendes_Bild, System.Drawing.Imaging.ImageFormat.Bmp);
- using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(zu_transformierendes_Bild))
- {
- using (System.Drawing.Drawing2D.Matrix matrix1 = new System.Drawing.Drawing2D.Matrix())
- {
- matrix1.Translate(zu_transformierendes_Bild.Width / 2, zu_transformierendes_Bild.Height / 2);
- graphics.Transform = matrix1;
- matrix1.Scale((float)Math.Cos(eingegebener_Winkel_in_Grad * Math.PI / 180.0), 1f);
- zu_transformierendes_Bild.Save(@"C:\Users\...\Desktop\Test.png", System.Drawing.Imaging.ImageFormat.Png);
- }
- }
- }
- public static byte[] ToByteArray(System.Drawing.Bitmap myBitmap, ImageFormat format)
- {
- using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
- {
- if (myBitmap != null)
- {
- myBitmap.Save(ms, format);
- return ms.ToArray();
- }
- return Array.Empty<byte>();
- }
- }
Die Funktion
ToByteArray()
hatte ich im Internet gefunden. Ich dachte, ich kann damit was machen... Danach habe ich gedacht, dass ich mittels Accord.Imaging
eine Matrix erstellen kann, denn der Befehl heißt so schön "Image.ToMatrix()" . Also installiert, und was ist passiert? Das gibt mir nur ein Array zurück . Und der Code, den ich gerade nicht auskommentiert habe, funktioniert nicht. Das gespeicherte Bild sieht genauso aus wie das Original.