void Draw() { int width = 400; int height = 400; const int RGBsize = 3; byte[] buffer = new byte[width * height * RGBsize]; for (int i = 0; i < buffer.Length; i++) { buffer[i] = 0xff; } GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned); try { IntPtr pBuf = handle.AddrOfPinnedObject(); using (var pl = new PLStream()) { pl.sdev("mem"); pl.smem(width, height, pBuf); pl.init(); pl.env(0, 10.0, 0, 10.0, 0, 0); pl.join(1.0, 2.0, 7.0, 8.0); } Bitmap bmp = new Bitmap(width, height, 3 * width, PixelFormat.Format24bppRgb, pBuf); this.pictureBox1.Width = width; this.pictureBox1.Height = height; this.pictureBox1.Image = bmp; // bmp.Save("test.bmp"); } finally { handle.Free(); } }