Autor Beitrag
Chiyoko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# (VS 2017)
BeitragVerfasst: Do 25.05.17 22:30 
Hallö,

seit Tagen versuche ich eine AccessViolationException zu beseitigen, die beim zeichnen eines Hintergrundbildes für ein Control auftritt.
Dabei wird ein Bild durch das Tao.Devil Framework geladen und in eine Bitmap umgewandelt....und irgendwas muss hier schief laufen. Würde mich über Hinweise freuen :D


ausblenden volle Höhe 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:
27:
28:
29:
30:
31:
32:
    public static Bitmap GetImage(string source)
        {
            int imgName;
            Il.ilInit();
            Ilu.iluInit();
            Il.ilGenImages(1out imgName);

            Il.ilBindImage(imgName);
            Il.ilLoadImage(source);
            int width = Il.ilGetInteger(Il.IL_IMAGE_WIDTH);
            int height = Il.ilGetInteger(Il.IL_IMAGE_HEIGHT);
            int bpp = Il.ilGetInteger(Il.IL_IMAGE_BPP);

            var ptr = Il.ilGetData();
            //int numBytes = width * height * 4;
            //byte[] rgbValues = new byte[numBytes];

            //Marshal.Copy(ptr, rgbValues, 0, numBytes);

            Bitmap bmp = new Bitmap(width, height, width * 4, PixelFormat.Format32bppArgb, ptr);
            BitmapData bmpData = bmp.LockBits(new Rectangle(00, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);
            Bitmap newBitmap = new Bitmap(width,height, bmpData.Stride, PixelFormat.Format32bppArgb, bmpData.Scan0);

            bmp.UnlockBits(bmpData);
            bmp.Dispose();
            Il.ilDeleteImages(1ref imgName);

            return newBitmap;
        }


Control.BackgroundImage = ...
Chiyoko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# (VS 2017)
BeitragVerfasst: Do 25.05.17 23:23 
Problem gelöst...
und warum immer, nachdem ins Forum geschrieben wurde?!:D

Indem die Pixel in eine Bitmap kopiert werden, verschwindet auch der Fehler.

ausblenden C#-Quelltext
1:
2:
3:
4:
Bitmap bmp = new Bitmap(width, height);
BitmapData bmd = bmp.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);

Il.ilCopyPixels(000, Il.ilGetInteger(Il.IL_IMAGE_WIDTH), Il.ilGetInteger(Il.IL_IMAGE_HEIGHT),1, Il.IL_BGRA, Il.IL_UNSIGNED_BYTE, bmd.Scan0);