Hi!
Есть проблема: нужно рендерить hi-res (прибл. 2500x3500 px) иллюстрации в SilverLight, имея возможноть зумирования. Возникли проблемы с алгоритмом интерполяции при масштабировании: не вижу способа, как его поменять. Нужен Highquality Bicubic, или что-то вроде него. Раньше это делалось в своём самодельном ActiveX через GDI+. Вот сравнение:
http://84.21.85.58/tmpimages/imgs.htm
Скачал MS-овский пример:
http://silverlight.net/samples/1.1/SilverlightSurface/Run/default.html
Поставил Orcas, откомпилил и подменил картинки на свои: качество низкое.
Порылся в доках по WPF и нашёл:
protected internal function get VisualBitmapScalingMode (): BitmapScalingMode
и
RenderOptions.SetBitmapScalingMode(MyImage, BitmapScalingMode.HighQuality);
однако ни того не другого в agclr от SIlverlight 1.1 не доступно. Тоесть: не могу поменять качество интерполяции.
Может есть какой способ получить Highquality Bicubic Interpolation, как в GDI+?
Thanks and good luck!
Пробовал откомпилировать
http://silverlight.net/samples/1.1/SilverlightSurface/Run/default.html и подменить имедж на свой: тот же результат. Плохое качество зума. А RenderOptions в WPF/E отсутствует.
Попробовал Flash 9:
http://84.21.85.58/tmpimages/imgs.htm
Совсем другое дело.
import flash.display.BitmapData;
var bm:BitmapData = BitmapData.loadBitmap( "MyImg" );
var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
mc.attachBitmap( bm, this.getNextHighestDepth(), "auto", true );
this._quality = "BEST";
mc._xscale = 20;
mc._yscale = 20;
var listener:Object = new Object();
listener.onMouseDown = function( ev: Object )
{
if( Key.isDown(Key.CONTROL) )
mc._xscale += 5, mc._yscale += 5;
else
mc._xscale -= 5, mc._yscale -= 5;
}
Mouse.addListener( listener );
mc.play();
this.stop();
Тоесть: он без проблем позволяет повысить качество и не жрёт при этом много памяти. Неужели SilverLight такой кривой?