Форум paint.net на русском языке

Работа с буфером обмена

Эта ветка форума посвящена вопросу, как самому сделать свой плагин (эффект) для Paint.NET. Для публикации своих эффектов используйте основной форум "Эффекты и плагины к Paint.NET"
Аватара пользователя
xmario
Администратор
Сообщения: 3366
Зарегистрирован: 03 апр 2010, 20:12
Репутация: 22
Пол: Мужской
Откуда: Москва

Работа с буфером обмена

Сообщение xmario » 10 сен 2010, 12:49

Как обратиться к буферу обмена в paint.net

Эффект (плагин) 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);
        }
    }
}


Оригинальную инструкцию на английском языке по этому поводу можно найти здесь.

Вернуться в «Как сделать свой эффект (плагин) для Paint.NET»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость

добавить на Яндекс
Rambler's Top100
Нравится

Этот сайт посвящен всему, что связано с бесплатным графическим редактором paint.net и вообще с рисованием в целом. На этом сайте вы найдете уроки paint.net, эффекты и плагины paint.net и даже просто схемы рисования, по которым можно рисовать обычными красками и простым карандашом. А вообще в интернет можно найти много интересного. Например, детям игры для детей или где найти образец резюме. И еще много того, что может оказаться полезным.