[Patchanim-commit] SF.net SVN: patchanim: [16] trunk/patchanim/src/com/mebigfatguy/patchanim/ gui/J
Brought to you by:
dbrosius
From: <dbr...@us...> - 2008-01-26 05:37:29
|
Revision: 16 http://patchanim.svn.sourceforge.net/patchanim/?rev=16&view=rev Author: dbrosius Date: 2008-01-25 21:37:34 -0800 (Fri, 25 Jan 2008) Log Message: ----------- get the combined sample patch drawing Modified Paths: -------------- trunk/patchanim/src/com/mebigfatguy/patchanim/gui/JPatchSamplePanel.java Modified: trunk/patchanim/src/com/mebigfatguy/patchanim/gui/JPatchSamplePanel.java =================================================================== --- trunk/patchanim/src/com/mebigfatguy/patchanim/gui/JPatchSamplePanel.java 2008-01-26 05:15:39 UTC (rev 15) +++ trunk/patchanim/src/com/mebigfatguy/patchanim/gui/JPatchSamplePanel.java 2008-01-26 05:37:34 UTC (rev 16) @@ -84,68 +84,25 @@ } } }); + + PatchPanelMediator mediator = PatchPanelMediator.getMediator(); + mediator.addActivePatchChangedListener(new ActivePatchChangedListener() { + public void activePatchChanged(ActivePatchChangedEvent apce) { + if (color == PatchColor.Combined) { + CombinedPatch currentPatch = apce.getActivePatch(); + recalcImage(color, currentPatch); + } + } + }); } public void recalcImage(final PatchColor color, final CombinedPatch patch) { Thread t = new Thread(new Runnable() { public void run() { if (color == PatchColor.Combined) { - + recalcCombinedImage(patch); } else { - PatchCoords coords = patch.getPatch(color); - - double u, u2, u3, oneMinusU, oneMinusU2, oneMinusU3; - double v, v2, v3, oneMinusV, oneMinusV2, oneMinusV3; - double[] uCoeffs = new double[ORDER]; - double[] vCoeffs = new double[ORDER]; - - for (int iu = 0; iu < SAMPLE_SIZE; iu++) { - u = (double)iu / (double)SAMPLE_SIZE; - u2 = u * u; - u3 = u2 * u; - oneMinusU = 1.0 - u; - oneMinusU2 = oneMinusU * oneMinusU; - oneMinusU3 = oneMinusU2 * oneMinusU; - - uCoeffs[0] = oneMinusU3; - uCoeffs[1] = 3.0 * u * oneMinusU2; - uCoeffs[2] = 3.0 * u2 * oneMinusU; - uCoeffs[3] = u3; - - for (int iv = 0; iv < SAMPLE_SIZE; iv++) { - v = (double)iv / (double)SAMPLE_SIZE; - v2 = v * v; - v3 = v2 * v; - oneMinusV = 1.0 - v; - oneMinusV2 = oneMinusV * oneMinusV; - oneMinusV3 = oneMinusV2 * oneMinusV; - - vCoeffs[0] = oneMinusV3; - vCoeffs[1] = 3.0 * v * oneMinusV2; - vCoeffs[2] = 3.0 * v2 * oneMinusV; - vCoeffs[3] = v3; - - double value = 0.0; - for (int i = 0; i < ORDER; i++) { - for (int j = 0; j < ORDER; j++) { - value += coords.getCoordinate(i, j).getColor() * uCoeffs[i] * vCoeffs[j]; - } - } - - int iValue = (int)value; - if (iValue > 255) - iValue = 255; - else if (iValue < 0) - iValue = 0; - if (color == PatchColor.Red) - iValue <<= 16; - else if (color == PatchColor.Green) - iValue <<= 8; - iValue |= 0xFF000000; - - image.setRGB(iu, iv, iValue); - } - } + recalcIndexedImage(color, patch); } SwingUtilities.invokeLater(new Runnable() { @@ -159,7 +116,128 @@ }); t.start(); } + + private void recalcCombinedImage(CombinedPatch patch) { + PatchCoords[] coords = new PatchCoords[3]; + + coords[0] = patch.getPatch(PatchColor.Red); + coords[1] = patch.getPatch(PatchColor.Green); + coords[2] = patch.getPatch(PatchColor.Blue); + + double u, u2, u3, oneMinusU, oneMinusU2, oneMinusU3; + double v, v2, v3, oneMinusV, oneMinusV2, oneMinusV3; + double[] uCoeffs = new double[ORDER]; + double[] vCoeffs = new double[ORDER]; + double[] value = new double[3]; + int[] iValue = new int[3]; + + for (int iu = 0; iu < SAMPLE_SIZE; iu++) { + u = (double)iu / (double)SAMPLE_SIZE; + u2 = u * u; + u3 = u2 * u; + oneMinusU = 1.0 - u; + oneMinusU2 = oneMinusU * oneMinusU; + oneMinusU3 = oneMinusU2 * oneMinusU; + + uCoeffs[0] = oneMinusU3; + uCoeffs[1] = 3.0 * u * oneMinusU2; + uCoeffs[2] = 3.0 * u2 * oneMinusU; + uCoeffs[3] = u3; + + for (int iv = 0; iv < SAMPLE_SIZE; iv++) { + v = (double)iv / (double)SAMPLE_SIZE; + v2 = v * v; + v3 = v2 * v; + oneMinusV = 1.0 - v; + oneMinusV2 = oneMinusV * oneMinusV; + oneMinusV3 = oneMinusV2 * oneMinusV; + + vCoeffs[0] = oneMinusV3; + vCoeffs[1] = 3.0 * v * oneMinusV2; + vCoeffs[2] = 3.0 * v2 * oneMinusV; + vCoeffs[3] = v3; + value[0] = value[1] = value[2] = 0.0; + + for (int i = 0; i < ORDER; i++) { + for (int j = 0; j < ORDER; j++) { + double coeff = uCoeffs[i] * vCoeffs[j]; + for (int k = 0; k < 3; k++) { + value[k] += coords[k].getCoordinate(i, j).getColor() * coeff; + } + } + } + + for (int k = 0; k < 3; k++) { + iValue[k] = (int)value[k]; + if (iValue[k] > 255) + iValue[k] = 255; + else if (iValue[k] < 0) + iValue[k] = 0; + } + int compValue = 0xFF000000 | (iValue[0] << 16) | (iValue[1] << 8) | iValue[2]; + image.setRGB(iu, iv, compValue); + } + } + } + + private void recalcIndexedImage(PatchColor color, CombinedPatch patch) { + PatchCoords coords = patch.getPatch(color); + + double u, u2, u3, oneMinusU, oneMinusU2, oneMinusU3; + double v, v2, v3, oneMinusV, oneMinusV2, oneMinusV3; + double[] uCoeffs = new double[ORDER]; + double[] vCoeffs = new double[ORDER]; + + for (int iu = 0; iu < SAMPLE_SIZE; iu++) { + u = (double)iu / (double)SAMPLE_SIZE; + u2 = u * u; + u3 = u2 * u; + oneMinusU = 1.0 - u; + oneMinusU2 = oneMinusU * oneMinusU; + oneMinusU3 = oneMinusU2 * oneMinusU; + + uCoeffs[0] = oneMinusU3; + uCoeffs[1] = 3.0 * u * oneMinusU2; + uCoeffs[2] = 3.0 * u2 * oneMinusU; + uCoeffs[3] = u3; + + for (int iv = 0; iv < SAMPLE_SIZE; iv++) { + v = (double)iv / (double)SAMPLE_SIZE; + v2 = v * v; + v3 = v2 * v; + oneMinusV = 1.0 - v; + oneMinusV2 = oneMinusV * oneMinusV; + oneMinusV3 = oneMinusV2 * oneMinusV; + + vCoeffs[0] = oneMinusV3; + vCoeffs[1] = 3.0 * v * oneMinusV2; + vCoeffs[2] = 3.0 * v2 * oneMinusV; + vCoeffs[3] = v3; + + double value = 0.0; + for (int i = 0; i < ORDER; i++) { + for (int j = 0; j < ORDER; j++) { + value += coords.getCoordinate(i, j).getColor() * uCoeffs[i] * vCoeffs[j]; + } + } + + int iValue = (int)value; + if (iValue > 255) + iValue = 255; + else if (iValue < 0) + iValue = 0; + if (color == PatchColor.Red) + iValue <<= 16; + else if (color == PatchColor.Green) + iValue <<= 8; + iValue |= 0xFF000000; + + image.setRGB(iu, iv, iValue); + } + } + } + private void buildImage() { if (rgb == null) { image = new BufferedImage(SAMPLE_SIZE, SAMPLE_SIZE, BufferedImage.TYPE_3BYTE_BGR); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |