Laden...
R
rene.dh myCSharp.de - Member
Softwareentwickler Erlangen Dabei seit 10.05.2007 2 Beiträge
Benutzerbeschreibung

Forenbeiträge von rene.dh Ingesamt 2 Beiträge

17.05.2007 - 22:00 Uhr

Erfordert Marshal.Copy im Zusammenhang mit einer ASP.NET Anwendung eine spezielle Berechtigung in der Anwendung?

Danke

Rene

17.05.2007 - 13:38 Uhr

Hallo Robertico

mit großem Interesse habe ich deinen Beitrag gelesen.
Ich denke, dass ich mit deinen Überlegungen zu der Klasse der Lösung meines Problems näher komme.

Was habe ich gemacht:
Ich habe mir eine Klasse zum Konvertieren von Bildformaten geschrieben, wobei ich die gegebenen Möglichkeiten der Framework und hier der Image-Klasse ausnutze. Laut "Petzold" sollte man immer die Image-Klasse nutzen, wenn man seine Aufgaben damit lösen kann.

Wo hab ich nun ein Problem? Wenn ich nach TIF oder GIF konvertieren lasse, dann wirft es mir immer eine Exception, wobei ich beim Debuggen festgestellt habe, dass das Pixelformat immer wieder auf PixelFormat.Format8bppIndexed zurückgesetzt wurde. Der resultierende Stream ist dann auch nur noch 2408 groß X( 🤔

Eine weitere Sache wäre noch die Speicherverwaltung? Da weiß ich auch noch nicht, ob das so alles optimal gelöst ist...

Vielleicht hat jemand noch eine Idee... ich komme hier jedenfalls nicht mehr weiter (nicht so richtig...).

Danke

Rene

Die vollständige Klasse ist im Anhang



        private Image ConvertImage(Image sourceImage, ImageFormat targetImageFormat)
        {
            if (sourceImage.RawFormat.Equals(targetImageFormat))
            {
                return sourceImage;
            }
            PixelFormat _pixelFormat = PixelFormat.Format32bppArgb;
            if (targetImageFormat.Equals(ImageFormat.Jpeg))
            {
                _pixelFormat = PixelFormat.Format24bppRgb;
            }
            else if (targetImageFormat.Equals(ImageFormat.Gif))
            {
                _pixelFormat = PixelFormat.Format32bppArgb;
            }
            else if (targetImageFormat.Equals(ImageFormat.Bmp))
            {
                _pixelFormat = PixelFormat.Format32bppArgb;
            }
            else if (targetImageFormat.Equals(ImageFormat.Png))
            {
                _pixelFormat = PixelFormat.Format32bppArgb;
            }
            else if (targetImageFormat.Equals(ImageFormat.Tiff))
            {
                _pixelFormat = PixelFormat.Format32bppArgb;
            }
            else if (targetImageFormat.Equals(ImageFormat.Wmf))
            {
                _pixelFormat = PixelFormat.Undefined;
            }
            else
            {
                _pixelFormat = PixelFormat.Format24bppRgb;
            }


            Bitmap bmp = new Bitmap(sourceImage.Size.Width,
                                          sourceImage.Size.Height,
                                          _pixelFormat);
            Graphics g1 = Graphics.FromImage(bmp);

            g1.DrawImage(bmp,
                         0,0,
                         bmp.Size.Width,
                         bmp.Size.Height);

            g1.CompositingQuality = CompositingQuality.HighQuality;
            g1.SmoothingMode = SmoothingMode.HighQuality;
            g1.InterpolationMode = InterpolationMode.HighQualityBicubic;

            g1.Dispose();
            
            using (Stream imgStream = new MemoryStream())
            {
                bmp.Save(imgStream, targetImageFormat);
                bmp.Dispose();
                imgStream.Seek(0, SeekOrigin.Begin);
                return GetImage(imgStream);
            }
            return null;
        }


        public Image GetImage(Stream imageSourceStream)
        {
            return Image.FromStream(imageSourceStream);
        }