Floodlight Ответов: 1

Как получить значение interpolationmode из функции


Привет у меня есть функция где я получаю значение InterpolationMode от пользователя:

Public Function EncodeImage(ByVal input As Image,ByVal output As String,Optional interpolation As InterpolationMode = InterpolationMode.HighQualityBicubic) As Image

Однако я не могу понять, как на самом деле получить значение, когда оно установлено.

Что я уже пробовал:

Я пробовал что-то вроде:
If interpolation Then graphicsHandle.InterpolationMode = interpolation
Но это не придает значения.

Любые подсказки будут очень ценны. Спасибо!

phil.o

Откуда берется ценность? Режим интерполяции используется графическими объектами только при масштабировании или повороте изображений; он не сохраняется в самом изображении.
Таким образом, независимо от того, используете ли вы его в функции, где он был передан в качестве параметра, или вы храните его в глобальной переменной, если хотите запомнить его для дальнейших операций.

Контекст, в котором вы хотите получить это значение, неясен.

1 Ответов

Рейтинг:
1

User 13204940

Прежде всего, это можно улучшить, удалив ByVal, так как он все равно используется по умолчанию:

Public Function EncodeImage(ByVal input As Image,ByVal output As String,Optional interpolation As InterpolationMode = InterpolationMode.HighQualityBicubic) As Image
Public Function EncodeImage(input As Image, output As String, Optional interpolation As InterpolationMode = InterpolationMode.HighQualityBicubic) As Image

Это также может быть логически улучшено:
If interpolation Then graphicsHandle.InterpolationMode = interpolation
graphicsHandle.InterpolationMode = interpolation

Помимо того, что первый из них менее эффективен, он вызовет ошибку, потому что вы сравниваете Интерполяционный режим с true/false, и он не может быть сравнен как таковой.

Если вы пытаетесь установить режим интерполяции чего-то и он был передан в качестве параметра функции, как вы уже настроили, вы можете просто сделать вышеописанное, чтобы использовать его;
graphicsHandle.InterpolationMode = interpolation

Что вас может смутить, так это необязательное ключевое слово. Это означает, что вы можете указать значение, которое переопределяет значение по умолчанию, или оставить его, и будет использоваться значение по умолчанию.

Это означает, что вы можете использовать оба следующих сценария:
Dim myImg As New Bitmap()
Dim img As Bitmap = EncodeImage(myImg, "this is the output") ' interpolation left blank so it will default to InterpolationMode.HighQualityBicubic
Dim myImg As New Bitmap()
Dim img As Bitmap = EncodeImage(myImg, "this is the output", InterpolationMode.SomethingElse)