Předmět Autor Datum
ve visual basicu? jako si chces naprogramovat - pak to bude neco jako v jave - image transform a pro…
AZOR2 18.12.2011 13:55
AZOR2
public static void blur( int[] in, int[] out, int width, int height, int radius ) { int widthMinus1…
AZOR2 18.12.2011 13:57
AZOR2
díky moc :-)
xtroff 18.12.2011 14:00
xtroff
Získaš dáta z obrázka do nejakého poľa, to pole prebehneš a upravíš ho podľa algoritmu, zapíšeš upra…
los 18.12.2011 14:04
los
VB 2008
xtroff 18.12.2011 15:03
xtroff
Také neexistuje. Zrejme máš na mysli VB.NET a pracuješ v prostredí Visual Studio 2008.
los 18.12.2011 15:09
los
Přesně tak.
xtroff 18.12.2011 15:11
xtroff
Ak nie je tvojím cieľom naučiť sa, ako také filtre fungujú, tak môžeš použiť nejaké hotové riešenie,… poslední
los 18.12.2011 15:26
los
 public static void blur( int[] in, int[] out, int width, int height, int radius ) {
        int widthMinus1 = width-1;
        int tableSize = 2*radius+1;
        int divide[] = new int[256*tableSize];

        for ( int i = 0; i < 256*tableSize; i++ )
            divide[i] = i/tableSize;

        int inIndex = 0;
        
        for ( int y = 0; y < height; y++ ) {
            int outIndex = y;
            int ta = 0, tr = 0, tg = 0, tb = 0;

            for ( int i = -radius; i <= radius; i++ ) {
                int rgb = in[inIndex + ImageMath.clamp(i, 0, width-1)];
                ta += (rgb >> 24) & 0xff;
                tr += (rgb >> 16) & 0xff;
                tg += (rgb >> 8) & 0xff;
                tb += rgb & 0xff;
            }

            for ( int x = 0; x < width; x++ ) {
                out[ outIndex ] = (divide[ta] << 24) | (divide[tr] << 16) | (divide[tg] << 8) | divide[tb];

                int i1 = x+radius+1;
                if ( i1 > widthMinus1 )
                    i1 = widthMinus1;
                int i2 = x-radius;
                if ( i2 < 0 )
                    i2 = 0;
                int rgb1 = in[inIndex+i1];
                int rgb2 = in[inIndex+i2];
                
                ta += ((rgb1 >> 24) & 0xff)-((rgb2 >> 24) & 0xff);
                tr += ((rgb1 & 0xff0000)-(rgb2 & 0xff0000)) >> 16;
                tg += ((rgb1 & 0xff00)-(rgb2 & 0xff00)) >> 8;
                tb += (rgb1 & 0xff)-(rgb2 & 0xff);
                outIndex += height;
            }
            inIndex += width;
        }
    }

Konkrétně tohle staci prepsat do VB - misto zavorek "END" ci END IF apod.

Získaš dáta z obrázka do nejakého poľa, to pole prebehneš a upravíš ho podľa algoritmu, zapíšeš upravené dáta späť do obrázka. Tým algoritmom môže byť Gaussovo rozmazanie alebo niektoré rýchlejšie filtre (stack blur, box blur, ...). Algoritmy nájdeš na nete, prípadne aj celé knižnice. Visual Basic je dosť široký pojem - máš na mysli naozaj VB6? Alebo VBS, VBA, VB.NET? Prečo vlastne Visual Basic - sú lepšie alternatívy.

Zpět do poradny Odpovědět na původní otázku Nahoru