Эффект (плагин) paint.net может обращаться к изображению, находящемуся в буфере обмена Windows. Правда, доступ к изображению, находящемуся в буфере обмена из кода эффекта paint.net несколько небанален. Обращение к буферу обмена осуществляется в paint.net через STA-поток.
Для примера работы с буфером обмена из paint.net, ниже приведен код плагина, который вставляет изображение из буфера обмена в текущую выделенную область рисунка paint.net. Если изображение в буфере обмена меньше, чем выделенная область, плагин будет повторять его.
Код: Выделить всё
// Author: Illnab1024
#region UICode
#endregion
protected Surface img
{
get { if (_img != null)
return _img;
else
{
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(GetImageFromClipboard));
t.SetApartmentState(System.Threading.ApartmentState.STA);
t.Start();
t.Join();
return _img;
}
}
}
private Surface _img = null;
private void GetImageFromClipboard()
{
Bitmap aimg = null;
IDataObject clippy;
try
{
clippy = Clipboard.GetDataObject();
if (clippy != null)
{
aimg = (Bitmap)clippy.GetData(typeof(System.Drawing.Bitmap));
}
}
catch (Exception )
{
}
if (aimg != null)
{
_img = Surface.CopyFromBitmap(aimg);
}
else
{
_img = null;
}
}
void Render(Surface dst, Surface src, Rectangle rect)
{
for (int y = rect.Top; y < rect.Bottom; y++)
{
for (int x = rect.Left; x < rect.Right; x++)
{
if (img == null)
dst[x,y] = src[x,y];
else
dst[x,y] = img.GetBilinearSampleWrapped(x,y);
}
}
}