public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { object result = DependencyProperty.UnsetValue; if ((value != null) && (value is Raster.Pixel)) { Raster.Pixel pixel = (Raster.Pixel)value; if (parameter is string) { if ((string)parameter == "R") { result = pixel.Color.R.ToString("X2"); } if ((string)parameter == "G") { result = pixel.Color.G.ToString("X2"); } if ((string)parameter == "B") { result = pixel.Color.B.ToString("X2"); } if ((string)parameter == "E") { result = pixel.E.ToString(@"0.00", CultureInfo.InvariantCulture); } } } return(result); } // Convert
} // EDiffRasterAffinityDetector /// <summary> /// Реализация метода получения значений реперных характеристик устойчивого блока, в качестве которого в данной реализации выступает пиксель растра. /// Реперной характеристикой в этой реализации является яркость пикселя в нормированном цветовом пространстве (0-1). /// </summary> /// <param name="pixel">Пиксель растра, соответствующий устойчивому блоку реперных характеристик.</param> /// <returns>Значение реперных характеристик пикселя. В данной реализации - яркость пикселя в нормированном цветовом пространстве (0-1).</returns> protected override object GetPixelValue(Raster.Pixel pixel) { return(pixel.E); } // GetPixelValue
/// <summary> /// Конструктор. /// </summary> /// <param name="pixel">Пиксель растра, представляющий данный устойчивый блок. /// Важно! При переборе пикселей растра через RasterEnumerator экземпляр текущего пикселя не меняется, меняются только значения его свойств. /// Это существенно влияет на реализацию получения значений Keys и Values. По сути данный класс является просто оберткой над классом пикселя, /// обеспечивающей требуемую степень абстракции.</param> /// <param name="getKey">Метод получения ключа, представляющего собой положение пикселя в растре в виде его координат.</param> /// <param name="getValue">Метод получения совокупности значений реперных характеристик пикселя в растре.</param> public PixelAffinityBlock(Raster.Pixel pixel, Func <Raster.Pixel, object> getKey, Func <Raster.Pixel, object> getValue) { Pixel = pixel; GetKey = getKey; GetValue = getValue; } // PixelAffinityBlock