[Patchanim-commit] SF.net SVN: patchanim: [74] trunk/patchanim/src/com/mebigfatguy/patchanim/ surfa
Brought to you by:
dbrosius
|
From: <dbr...@us...> - 2008-01-31 05:44:07
|
Revision: 74
http://patchanim.svn.sourceforge.net/patchanim/?rev=74&view=rev
Author: dbrosius
Date: 2008-01-30 21:44:11 -0800 (Wed, 30 Jan 2008)
Log Message:
-----------
use WritableRaster's DataBuffer, rather than calling setPixel on the image (performance)
Modified Paths:
--------------
trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java
Modified: trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java
===================================================================
--- trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-01-30 05:35:33 UTC (rev 73)
+++ trunk/patchanim/src/com/mebigfatguy/patchanim/surface/PatchGenerator.java 2008-01-31 05:44:11 UTC (rev 74)
@@ -21,7 +21,9 @@
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
+import java.awt.image.DataBuffer;
import java.awt.image.IndexColorModel;
+import java.awt.image.WritableRaster;
import com.mebigfatguy.patchanim.OutOfBoundsColor;
import com.mebigfatguy.patchanim.PatchColor;
@@ -35,6 +37,10 @@
if (patch == null)
return;
+ WritableRaster wr = image.getRaster();
+ DataBuffer db = wr.getDataBuffer();
+ int pixel = 0;
+
PatchCoords[] coords = new PatchCoords[3];
coords[0] = patch.getPatch(PatchColor.Red);
@@ -51,32 +57,32 @@
int sampleSizeX = image.getWidth();
int sampleSizeY = image.getHeight();
- for (int iu = 0; iu < sampleSizeX; iu++) {
- u = (double)iu / (double)sampleSizeX;
- u2 = u * u;
- u3 = u2 * u;
- oneMinusU = 1.0 - u;
- oneMinusU2 = oneMinusU * oneMinusU;
- oneMinusU3 = oneMinusU2 * oneMinusU;
+ for (int iv = 0; iv < sampleSizeY; iv++) {
+ v = (double)iv / (double)sampleSizeY;
+ v2 = v * v;
+ v3 = v2 * v;
+ oneMinusV = 1.0 - v;
+ oneMinusV2 = oneMinusV * oneMinusV;
+ oneMinusV3 = oneMinusV2 * oneMinusV;
- uCoeffs[0] = oneMinusU3;
- uCoeffs[1] = 3.0 * u * oneMinusU2;
- uCoeffs[2] = 3.0 * u2 * oneMinusU;
- uCoeffs[3] = u3;
+ vCoeffs[0] = oneMinusV3;
+ vCoeffs[1] = 3.0 * v * oneMinusV2;
+ vCoeffs[2] = 3.0 * v2 * oneMinusV;
+ vCoeffs[3] = v3;
+
+ for (int iu = 0; iu < sampleSizeX; iu++) {
+ u = (double)iu / (double)sampleSizeX;
+ 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 < sampleSizeY; iv++) {
- v = (double)iv / (double)sampleSizeY;
- 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 < PatchCoords.ORDER; i++) {
@@ -103,8 +109,12 @@
iValue[k] = iValue[k] & 0x00FF;
}
}
- int compValue = 0xFF000000 | (iValue[0] << 16) | (iValue[1] << 8) | iValue[2];
- image.setRGB(iu, iv, compValue);
+
+ db.setElem(pixel++, iValue[0]);
+ db.setElem(pixel++, iValue[1]);
+ db.setElem(pixel++, iValue[2]);
+ //int compValue = 0xFF000000 | (iValue[0] << 16) | (iValue[1] << 8) | iValue[2];
+ //image.setRGB(iu, iv, compValue);
}
}
}
@@ -113,6 +123,10 @@
if (patch == null)
return;
+ WritableRaster wr = image.getRaster();
+ DataBuffer db = wr.getDataBuffer();
+ int pixel = 0;
+
PatchCoords coords = patch.getPatch(color);
double u, u2, u3, oneMinusU, oneMinusU2, oneMinusU3;
@@ -123,32 +137,32 @@
int sampleSizeX = image.getWidth();
int sampleSizeY = image.getHeight();
- for (int iu = 0; iu < sampleSizeX; iu++) {
- u = (double)iu / (double)sampleSizeX;
- u2 = u * u;
- u3 = u2 * u;
- oneMinusU = 1.0 - u;
- oneMinusU2 = oneMinusU * oneMinusU;
- oneMinusU3 = oneMinusU2 * oneMinusU;
+ for (int iv = 0; iv < sampleSizeY; iv++) {
+ v = (double)iv / (double)sampleSizeY;
+ v2 = v * v;
+ v3 = v2 * v;
+ oneMinusV = 1.0 - v;
+ oneMinusV2 = oneMinusV * oneMinusV;
+ oneMinusV3 = oneMinusV2 * oneMinusV;
- uCoeffs[0] = oneMinusU3;
- uCoeffs[1] = 3.0 * u * oneMinusU2;
- uCoeffs[2] = 3.0 * u2 * oneMinusU;
- uCoeffs[3] = u3;
+ vCoeffs[0] = oneMinusV3;
+ vCoeffs[1] = 3.0 * v * oneMinusV2;
+ vCoeffs[2] = 3.0 * v2 * oneMinusV;
+ vCoeffs[3] = v3;
- for (int iv = 0; iv < sampleSizeY; iv++) {
- v = (double)iv / (double)sampleSizeY;
- v2 = v * v;
- v3 = v2 * v;
- oneMinusV = 1.0 - v;
- oneMinusV2 = oneMinusV * oneMinusV;
- oneMinusV3 = oneMinusV2 * oneMinusV;
+ for (int iu = 0; iu < sampleSizeX; iu++) {
+ u = (double)iu / (double)sampleSizeX;
+ u2 = u * u;
+ u3 = u2 * u;
+ oneMinusU = 1.0 - u;
+ oneMinusU2 = oneMinusU * oneMinusU;
+ oneMinusU3 = oneMinusU2 * oneMinusU;
- vCoeffs[0] = oneMinusV3;
- vCoeffs[1] = 3.0 * v * oneMinusV2;
- vCoeffs[2] = 3.0 * v2 * oneMinusV;
- vCoeffs[3] = v3;
-
+ uCoeffs[0] = oneMinusU3;
+ uCoeffs[1] = 3.0 * u * oneMinusU2;
+ uCoeffs[2] = 3.0 * u2 * oneMinusU;
+ uCoeffs[3] = u3;
+
double value = 0.0;
for (int i = 0; i < PatchCoords.ORDER; i++) {
for (int j = 0; j < PatchCoords.ORDER; j++) {
@@ -169,13 +183,8 @@
else
iValue = iValue & 0x00FF;
}
- if (color == PatchColor.Red)
- iValue <<= 16;
- else if (color == PatchColor.Green)
- iValue <<= 8;
- iValue |= 0xFF000000;
- image.setRGB(iu, iv, iValue);
+ db.setElem(pixel++, iValue);
}
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|