[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.
|