Рейтинг@Mail.ru
aave

aave

Допустим, нам нужно сохранить какой-то элемент управления в окне WPF в изображение. Можно сделать это, например, так.

Сначала сгенерируем изображение с помощью класса RenderTargetBitmap(), запишем его в поток в памяти, прочитаем и сохраним в объект типа String():

''' <summary>
''' Генерирует строку, представляющую поток изображения, из FrameworkElement.
''' </summary>
''' <param name="elem">Элемент, который будет преобразован в изображение.</param>
Private Function GetElementAsString(ByVal elem As FrameworkElement) As String    
    Dim w As Integer = CInt(elem.ActualWidth)
    Dim h As Integer = CInt(elem.ActualHeight)
    Dim renderBitmap As New RenderTargetBitmap(w, h, 96, 96, PixelFormats.Default)
    renderBitmap.Render(elem)

    Dim pngEncoder As New PngBitmapEncoder()
    pngEncoder.Frames.Add(BitmapFrame.Create(renderBitmap))

    Dim pngStr As String = String.Empty
    Using ms As New IO.MemoryStream()
        pngEncoder.Save(ms)
        ms.Seek(0, IO.SeekOrigin.Begin)
        Using sr As New IO.StreamReader(ms, Text.Encoding.Default)
            pngStr = sr.ReadToEnd
        End Using
    End Using
    Return pngStr
End Function

Напишем метод для сохранения изображения в файл:

''' <summary>
''' Сохраняет строку с данными изображения в файл PNG с заданным именем.
''' </summary>
''' <param name="fileName">Имя файла с расширением PNG, под которым будет сохранено изображение.</param>
''' <param name="imgStr">Строка, представляющая изображение.</param>
Private Sub SaveElementAsImage(ByVal fileName As String, ByVal imgStr As String)
    Using fs As New IO.FileStream(fileName, IO.FileMode.Create)
        Using sw As New IO.StreamWriter(fs, Text.Encoding.Default)
            sw.Write(imgStr)
        End Using
    End Using
End Sub

Теперь мы можем сохранить изображение в файл, используя предыдущие два метода:

Dim pngStr As String = GetElementAsString(MyControlToSave)
SaveElementAsImage("1.png", "Рисунок 1")
Подробнее ...

Допустим, у нас есть упорядоченный список объектов MyList() типа даты: List(of DateTime), и нам нужно выбрать из него только те объекты, которые имеют уникальные значения минут (или часов, или секунд, и т.п.). Выберем только первые встреченные значения с уникальным параметром. Для этого можно воспользоваться языком запросов LINQ и языком VB.NET.

Вариант 1 (самый быстрый)

Dim selected As IEnumerable(Of DateTime) = MyList.GroupBy(Function(d As DateTime) d.TimeStamp.Minute).[Select](Function(g) g.First)

Вариант 2

Dim selected As IEnumerable(Of IGrouping(Of Integer, DateTime)) = MyList.GroupBy(Function(n As DateTime) (n.Minute)).Distinct

Вариант 3 (самый медленный, использует преобразование к типу Lookup())

Dim selected As ILookup(Of Integer, DateTime) = MyList.ToLookup(Of Integer, DateTime)(Function(ByVal x As DateTime) x.Minute, Function(ByVal y As DateTime) y)
Подробнее ...

Для использования системных цветов в XAML необходимо объявить цвет в секции ресурсов:

<Window.Resources>
    <SolidColorBrush x:Key="sysColor" Color="{DynamicResource {x:Static SystemColors.ControlColorKey}}" />
</Window.Resources>

А затем его можно использовать в разметке так:

<Menu Background="{StaticResource sysColor}"></Menu>
Подробнее ...

Для того чтобы определить, что в системе установлена платформа .NET, можно проверить в системном каталоге C:\Windows\System32\ наличие файла mscoree.dll – основного файла платформы .NET.

Чтобы узнать, какая версия (или версии, обычно их установлено несколько) платформы .NET установлена на компьютере, нужно проверить следующий раздел системного реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP

В этом разделе будут находиться подразделы установленных версий .NET, например: v3.0, v3.5, v4.0 и т.д.

Подробнее ...
Подписаться на этот канал RSS