![]() |
|
|
|||||
Регистрация: Feb 2009
Сообщений: 63
|
![]() код шейдера масштабирующего картинку:
<languageVersion : 1.0;> kernel BilinearResample < namespace : "com.brooksandrus.pixelbender"; vendor : "Brooks Andrus"; version : 1; description : "Resizes an image using bilinear resampling. Constrains aspect ratio - divide Math.max( input.width / output.width, input.height / output.height ) and pass in to the scale parameter"; > { parameter float scale < minValue: 0.0; maxValue: 1000.0; defaultValue: 1.0; >; input image4 src; output pixel4 dst; void evaluatePixel() { // scale should be Math.max( src.width / output.width, src.height / output.height ) dst = sampleLinear( src, outCoord() * scale ); // bilinear scaling } } public function resampleBitmap(desiredWidth:int, desiredHeight:int, cleanup:Boolean = true ):BitmapData{ var input:BitmapData = bitmap.bitmapData.clone(); var outputWidth:Number; var outputHeight:Number; if (input.width>desiredWidth){ outputWidth = desiredWidth; outputHeight = outputWidth/input.width*input.height; } else{ outputWidth = input.width; outputHeight = outputWidth/input.width*input.height; } if (outputHeight>desiredHeight){ outputHeight = desiredHeight; outputWidth = outputHeight/input.height*input.width; } var factor:Number = Math.max( input.width/outputWidth, input.height/outputHeight ); // create and configure a Shader object var shader:Shader = new Shader(); shader.byteCode = BilinearScalingLoader.data; shader.data.src.input = input; // supply the shader with BitmapData it will manipulate shader.data.scale.value = [factor]; // scale factor. shader params are all stored in arrays. // create a bitmap - our shader will return its data (an image) to this bitmap var output:BitmapData = new BitmapData( outputWidth, outputHeight ); // shader jobs are wicked cool var job:ShaderJob = new ShaderJob(); job.target = output; // ShaderJob returns to this object job.shader = shader; // The Shader assigned to this job job.start( true ); // true flag runs the job synchronously. if ( cleanup ){ input.dispose(); } return output; } bitmap - является загруженой Bitmap BilinearScalingLoader - содержит заранее подгруженый шейдер в итоге после вызова функции resampleBitmap операционная система просит закрыть приложение Последний раз редактировалось mrMEM; 04.03.2010 в 16:10. |
|
|||||
Я бы поступил так.
делим эту функцию пополам и вторую половину - каментим. Запускам. Если окно не появилась - значит ошибка в этой половине. Дальше делим эту половину... И так пока не найдем строчку, в которой вылетает. Ну или пошаговой отладкой локализируйте место. И дальше отпишитесь какая строчка валит приложение и уже тогда по обстоятельствам думать надо. p.s. Шейдер ведь скомпилен с поддержкой flash? Так же, полезно привести код как вы его грузите и как(и когда) запускаете. А то может вы его запускаете до того, как он загрузился. Мало ли. |
|
|||||
Регистрация: Feb 2009
Сообщений: 63
|
вылетает на строчке:
job.start( true ); при том, когда картинки имеют относительно большое разрешение порядка 2000px, не зависимо от того какой параметр масштабирования экспериментирую дальше может быть нужно дождаться завершение работы Job-a chabapok, спасибо за совет Добавлено через 20 минут хотя в документации написано, что параметр true в job.start( true ); означает, что операции проводятся в основном потоке выполнения программы. оказывается, я накасячил вначале параметры desiredWidth, desiredHeight имели исходные размеры картинки. однако, сейчас, когда все работает, похоже, что результат не сильно отличается от обычного масштабирования scaleX, scaleY, при том, что создатель шейдера обещал биномиальное масштабирование Последний раз редактировалось mrMEM; 04.03.2010 в 18:43. |
|
|||||
Попробуйте в шейдере вместо sampleLinear юзать sample. Там тогда размытие при масштабе получается типа эффекта blur, а не квадратики. (как называется - не знаю)
Я не очень понял, почему desiredWidth, desiredHeight -- это косяки, работать-то оно должно? Деления на ноль там вроде не возникает и уж точно не должно валить систему. А вот большое разрешение - плохо. Где-то там в хелпе писали, что не более (насколько помню) ~2500 должно получаться в результате. Если работает - хорошо, если нет - лучше отладить на малом изображении, и убедившись что все ок пробовать на большом. |
![]() |
![]() |
Часовой пояс GMT +4, время: 06:15. |
|
« Предыдущая тема | Следующая тема » |
Теги |
scale , Shader |
Опции темы | |
Опции просмотра | |
|
|