Soy un principiante en actionscript. Si entiendo correctamente, el DisplacementMapFilter mueve los píxeles de una 'imagen fuente' de acuerdo con el color de la posición de píxel correspondiente en una 'imagen MAP'.¿Cómo funciona el DisplacementMapFilter?
¡El problema es que mi imagen de destino contiene píxeles que NO están en la imagen de origen!
Por ejemplo, tomo una UNICOLOR 10 x 10 píxeles 'imagen de origen' con este bitmapData:
sourceBitmap = new BitmapData(BITMAP_WIDTH, BITMAP_HEIGHT, false, 0x000002);
produce:
0 1 2 3 4 5 6 7 8 9
[002,002,002,002,002,002,002,002,002,002] Row 0
[002,002,002,002,002,002,002,002,002,002] Row 1
[002,002,002,002,002,002,002,002,002,002] Row 2
[002,002,002,002,002,002,002,002,002,002] Row 3
[002,002,002,002,002,002,002,002,002,002] Row 4
[002,002,002,002,002,002,002,002,002,002] Row 5
[002,002,002,002,002,002,002,002,002,002] Row 6
[002,002,002,002,002,002,002,002,002,002] Row 7
[002,002,002,002,002,002,002,002,002,002] Row 8
[002,002,002,002,002,002,002,002,002,002] Row 9
Ahora, aprovecho mapa de desplazamiento NEGRO Y añado una pequeña plaza AZUL:
displacementBitmap = new BitmapData(BITMAP_WIDTH,BITMAP_HEIGHT,false,0x000000);
for(i=5;i<10;i++)
for(j=5;j<10;j++)
displacementBitmap.setPixel(i,j,255);
produce:
0 1 2 3 4 5 6 7 8 9
[000,000,000,000,000,000,000,000,000,000] Row 0
[000,000,000,000,000,000,000,000,000,000] Row 1
[000,000,000,000,000,000,000,000,000,000] Row 2
[000,000,000,000,000,000,000,000,000,000] Row 3
[000,000,000,000,000,000,000,000,000,000] Row 4
[000,000,000,000,000,255,255,255,255,255] Row 5
[000,000,000,000,000,255,255,255,255,255] Row 6
[000,000,000,000,000,255,255,255,255,255] Row 7
[000,000,000,000,000,255,255,255,255,255] Row 8
[000,000,000,000,000,255,255,255,255,255] Row 9
El resultado:
displacementFilter = new DisplacementMapFilter();
displacementFilter.alpha=0;
displacementFilter.color=0;
displacementFilter.mapPoint=new Point(0,0);
displacementFilter.scaleX=1;
displacementFilter.scaleY=1;
displacementFilter.componentX = flash.display.BitmapDataChannel.BLUE;
displacementFilter.componentY = flash.display.BitmapDataChannel.BLUE;
displacementFilter.mapBitmap = displacementBitmap;
destinationBitmap = new BitmapData(BITMAP_WIDTH,BITMAP_HEIGHT,false,0xFFFFFFFF);
destinationBitmap.applyFilter(
sourceBitmap.bitmapData,
new Rectangle(0,0,BITMAP_WIDTH,BITMAP_HEIGHT),
new Point(0,0),
displacementFilter
);
produce:
0 1 2 3 4 5 6 7 8 9
[002,002,002,002,002,002,002,002,002,002] Row 0
[002,002,002,002,002,002,002,002,002,002] Row 1
[002,002,002,002,002,002,002,002,002,002] Row 2
[002,002,002,002,002,002,002,002,002,002] Row 3
[002,002,002,002,002,002,002,002,002,002] Row 4
[002,002,002,002,002,001,001,001,001,001] Row 5
[002,002,002,002,002,001,001,001,001,001] Row 6
[002,002,002,002,002,001,001,001,001,001] Row 7
[002,002,002,002,002,001,001,001,001,001] Row 8
[002,002,002,002,002,001,001,001,001,001] Row 9
así que no entiendo por qué tengo '' 001 píxeles cuáles no existe en la imagen de origen.
Muchas gracias.
Y ahora, es hora de un enchufe desvergonzado para mi [pregunta] (http://stackoverflow.com/questions/9260717/displacement-map-filter-in-opencv). – karlphillip