PDA

Просмотр полной версии : Выборка пикселей


TanaTiX
16.06.2012, 14:53
Решил все же глянуть на этого "зверя". Как я могу получить доступ к определенному количеству пикселей (сразу), заданному в качестве входного значения? Как получить значение одиночного пикселя по координатам знаю, нескольких - нет. Я правильно понимаю, что в ПБ отсутствуют циклы? Как правильно поступать в таких ситуациях?

Zebestov
27.06.2012, 12:53
Циклы да, отсутствуют ( из-за этого приходится копировать строки вручную. А как поступать — уже по месту решать надо, либо отступить, либо исхитриться )

TanaTiX
27.06.2012, 12:59
Исхитриться? :) Изначально была идея написать простенький blur с указанием интенсивности и направления (горизонтально и вертикально). В сети как-то не очень оптимистично. Был бы рад подсказке.

Zebestov
27.06.2012, 13:04
Суть (http://www.gamerendering.com/2008/10/11/gaussian-blur-filter-shader/).

fish_r
09.07.2012, 21:22
Вот, кстати говоря - блур это конечно хорошо. А вот фильтр резкости был бы ещё лучше. В фотошопе можно резкость увеличить ( прямого фильтра нет, но с помощью несложных манипуляций), а во флеше нет. Хорошая была бы вещица...

mooncar
09.07.2012, 22:01
В фотошопе можно резкость увеличить ( прямого фильтра нет, но с помощью несложных манипуляций)
Сорри за офтоп, как же нет? А фильтры из набора группы Sharpen?

fish_r
09.07.2012, 22:34
Сорри за офтоп, как же нет? А фильтры из набора группы Sharpen?

Да, действительно, сори. Просто результат их работы не очень хороший, применяют другой способ, где-то видел в нескольких уроках, очень хорошо работает.

i.o.
10.07.2012, 00:20
Вот, кстати говоря - блур это конечно хорошо. А вот фильтр резкости был бы ещё лучше. В фотошопе можно резкость увеличить ( прямого фильтра нет, но с помощью несложных манипуляций), а во флеше нет. Хорошая была бы вещица...

Вам бы тему отдельную создать.
Вот фильтр:

<languageVersion : 1.0;>

kernel Sharpen
< namespace : "Your Namespace";
vendor : "i.o.";
version : 1;
description : "your description";
>
{
input image4 src;
output pixel4 dst;

void evaluatePixel()
{
float2 outCr = outCoord();


float4 matCore00 = sampleNearest(src, outCr - float2(-1.0, -1.0));
float4 matCore01 = sampleNearest(src, outCr - float2( 0.0, -1.0));
float4 matCore02 = sampleNearest(src, outCr - float2(+1.0, -1.0));

float4 matCore10 = sampleNearest(src, outCr - float2(-1.0, 0.0));
float4 matCore11 = sampleNearest(src, outCr - float2( 0.0, 0.0));
float4 matCore12 = sampleNearest(src, outCr - float2(+1.0, 0.0));

float4 matCore20 = sampleNearest(src, outCr - float2(-1.0, +1.0));
float4 matCore21 = sampleNearest(src, outCr - float2( 0.0, +1.0));
float4 matCore22 = sampleNearest(src, outCr - float2(+1.0, +1.0));


dst = -0.1*matCore00 - 0.1*matCore01 - 0.1*matCore02
- 0.1*matCore10 + 1.8*matCore11 - 0.1*matCore12
- 0.1*matCore20 - 0.1*matCore21 - 0.1*matCore22;
}
}