// 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; } } } }