// Create
        //--------------------------------------------------------------------
        public void create(RasterBuffer src)
        {
            m_height          = (int)agg_basics.uceil(src.Height());
            m_width           = (int)agg_basics.uceil(src.Width());
            m_width_hr        = (int)agg_basics.uround(src.Width() * LineAABasics.line_subpixel_scale);
            m_half_height_hr  = (int)agg_basics.uround(src.Height() * LineAABasics.line_subpixel_scale / 2);
            m_offset_y_hr     = m_dilation_hr + m_half_height_hr - LineAABasics.line_subpixel_scale / 2;
            m_half_height_hr += LineAABasics.line_subpixel_scale / 2;

            int NewSizeInBytes = (m_width + m_dilation * 2) * (m_height + m_dilation * 2);

            if (m_DataSizeInBytes < NewSizeInBytes)
            {
                if (m_data != null)
                {
                    System.Runtime.InteropServices.Marshal.FreeHGlobal(m_data);
                }
                m_DataSizeInBytes = NewSizeInBytes;
                m_data            = System.Runtime.InteropServices.Marshal.AllocHGlobal(m_DataSizeInBytes);
            }

            unsafe
            {
                m_buf.attach((byte *)m_data,
                             (uint)(m_width + m_dilation * 2),
                             (uint)(m_height + m_dilation * 2),
                             (int)(m_width + m_dilation * 2),
                             32);

                int         x, y;
                RGBA_Bytes *d1;
                RGBA_Bytes *d2;
                for (y = 0; y < m_height; y++)
                {
                    d1 = (RGBA_Bytes *)m_buf.GetPixelPointer(y + m_dilation) + m_dilation;
                    for (x = 0; x < m_width; x++)
                    {
                        *d1++ = *(RGBA_Bytes *)src.GetPixelPointer(x, y);
                    }
                }

                RGBA_Bytes *s1;
                RGBA_Bytes *s2;
                RGBA_Bytes  noColor = (RGBA_Bytes)RGBA_Bytes.no_color();
                for (y = 0; y < m_dilation; y++)
                {
                    //s1 = m_buf.GetPixelPointer(m_height + m_dilation - 1) + m_dilation;
                    //s2 = m_buf.GetPixelPointer(m_dilation) + m_dilation;
                    d1 = (RGBA_Bytes *)m_buf.GetPixelPointer(m_dilation + m_height + y) + m_dilation;
                    d2 = (RGBA_Bytes *)m_buf.GetPixelPointer(m_dilation - y - 1) + m_dilation;
                    for (x = 0; x < m_width; x++)
                    {
                        //*d1++ = RGBA_Bytes(*s1++, 0);
                        //*d2++ = RGBA_Bytes(*s2++, 0);
                        *d1++ = noColor;
                        *d2++ = noColor;
                    }
                }

                int h = m_height + m_dilation * 2;
                for (y = 0; y < h; y++)
                {
                    s1 = (RGBA_Bytes *)m_buf.GetPixelPointer(y) + m_dilation;
                    s2 = (RGBA_Bytes *)m_buf.GetPixelPointer(y) + m_dilation + m_width;
                    d1 = (RGBA_Bytes *)m_buf.GetPixelPointer(y) + m_dilation + m_width;
                    d2 = (RGBA_Bytes *)m_buf.GetPixelPointer(y) + m_dilation;

                    for (x = 0; x < m_dilation; x++)
                    {
                        *d1++ = *s1++;
                        *--d2 = *--s2;
                    }
                }
            }
        }