Как дорисовать вокруг Bitmap'а "рамочку" в 1 пиксе

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Как дорисовать вокруг Bitmap'а "рамочку" в 1 пиксе

Сообщение areh » 02.01.2008 (Ср) 6:08

Всем привет!

всвязи с наступившим НГ голова соображает плохо, а яндекс ищет не то что надо..
подскажите пожалуйста, как взяв экземпляр класса Bitmap сделать новый, который будет отличатся от оригинального только наличием "рамочки" шириной 1 пиксел.

пока сделал тупо: создается картинка размером +2 пикселя в оба направления, и по одному пикселу первоначальное изображение копируется в новое (со здвигом) потом дорисовывается рамочка.

работает медленно. так как реализация новогодняя..

а как сделать нормально?

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 02.01.2008 (Ср) 18:42

как то так
Код: Выделить всё
     Dim BmpOriginal As New Bitmap(100, 100)
    Dim BmpWithBorder As New Bitmap(BmpOriginal.Width + 2, BmpOriginal.Height + 2)

    Dim G As Graphics = Graphics.FromImage(BmpWithBorder)
    G.DrawImage(BmpOriginal, 1, 1)

    Dim R As Rectangle = Rectangle.Round(BmpWithBorder.GetBounds(GraphicsUnit.Pixel))
    R.Width -= 1 : R.Height -= 1
    G.FillRectangle(Brushes.AliceBlue, R)
    G.DrawRectangle(Pens.Black, R)
    G.Dispose()

    G = Me.CreateGraphics()
    G.DrawImage(BmpWithBorder, 10, 10)
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 02.01.2008 (Ср) 20:28

Nord777, большое спасибо!

я правда немного твой код подредактировал, оформил как функцию..

в итоге вот что получилось:
Код: Выделить всё
  Function GenerateBounds(ByVal BmpOriginal As Image, ByVal clr As Color) As Image
    Dim BmpWithBorder As New Bitmap(BmpOriginal.Width + 2, BmpOriginal.Height + 2)

    Dim G As Graphics = Graphics.FromImage(BmpWithBorder)

    Dim R As Rectangle = Rectangle.Round(BmpWithBorder.GetBounds(GraphicsUnit.Pixel))
    R.Width -= 1 : R.Height -= 1

    G.DrawRectangle(New Pen(clr), R)
    G.DrawImage(BmpOriginal, New Rectangle(1, 1, BmpOriginal.Width, BmpOriginal.Height), New Rectangle(0, 0, BmpOriginal.Width, BmpOriginal.Height), GraphicsUnit.Pixel)
    G.Dispose()

    Return BmpWithBorder
  End Function


PS работает примерно в 40 раз быстрее моего способа :)


Вернуться в Visual Basic .NET

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

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

    TopList