|
@@ -19,43 +19,49 @@ import org.eclipse.swt.graphics.ImageData;
|
|
|
import org.eclipse.swt.graphics.PaletteData;
|
|
|
import org.eclipse.swt.graphics.RGB;
|
|
|
|
|
|
-
|
|
|
+/**
|
|
|
+ *
|
|
|
+ * @deprecated Use {@link GraphicsUtil} instead
|
|
|
+ *
|
|
|
+ */
|
|
|
public class ImageRenderer {
|
|
|
|
|
|
-
|
|
|
- public ImageData calculateVerticalAlphaGradient(Rectangle bounds, RGB color, int alphaMax) {
|
|
|
-
|
|
|
+ public ImageData calculateVerticalAlphaGradient(Rectangle bounds,
|
|
|
+ RGB color, int alphaMax) {
|
|
|
+
|
|
|
// we build an indexed palette with one color
|
|
|
RGB[] colors = new RGB[2];
|
|
|
colors[0] = new RGB(0, 0, 0);
|
|
|
colors[1] = (color != null) ? color : new RGB(255, 255, 255);
|
|
|
PaletteData pd = new PaletteData(colors);
|
|
|
-
|
|
|
+
|
|
|
// we use image with 1 bit color depth plus alpha
|
|
|
- int bytesPerRow = bounds.width / 8 + ((bounds.width % 8 != 0) ? 1 : 0);
|
|
|
+ int bytesPerRow = bounds.width / 8 + ((bounds.width % 8 != 0) ? 1 : 0);
|
|
|
byte[] data = new byte[bytesPerRow * bounds.height];
|
|
|
-
|
|
|
- // fill all pixel with the same color
|
|
|
+
|
|
|
+ // fill all pixel with the same color
|
|
|
Arrays.fill(data, (byte) 0xFF);
|
|
|
|
|
|
// and create the image
|
|
|
- ImageData id = new ImageData(bounds.width, bounds.height, 1, pd, 1, data);
|
|
|
-
|
|
|
+ ImageData id = new ImageData(bounds.width, bounds.height, 1, pd, 1,
|
|
|
+ data);
|
|
|
+
|
|
|
// now calculate the gradient of alpha values ...
|
|
|
byte[] alphaData = id.alphaData = new byte[bounds.width * bounds.height];
|
|
|
double alphaFactor = alphaMax;
|
|
|
double height = bounds.height;
|
|
|
- for(int i=0; i<bounds.height; i++){
|
|
|
- // double ratio = (i<=alphaMaxPos) ? (2.0*i/height) : (2.0* (height-i)/height);
|
|
|
- double ratio = 1.0 - Math.sin(i/height*Math.PI/2.0);
|
|
|
+ for (int i = 0; i < bounds.height; i++) {
|
|
|
+ // double ratio = (i<=alphaMaxPos) ? (2.0*i/height) : (2.0*
|
|
|
+ // (height-i)/height);
|
|
|
+ double ratio = 1.0 - Math.sin(i / height * Math.PI / 2.0);
|
|
|
byte alphaValue = (byte) (ratio * alphaFactor);
|
|
|
- Arrays.fill(alphaData, i*bounds.width, i*bounds.width + bounds.width, alphaValue);
|
|
|
+ Arrays.fill(alphaData, i * bounds.width, i * bounds.width
|
|
|
+ + bounds.width, alphaValue);
|
|
|
}
|
|
|
|
|
|
return id;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* Masks the corners of a rounded rectangle with a specified alpha value.
|
|
|
*
|
|
@@ -63,92 +69,96 @@ public class ImageRenderer {
|
|
|
* @param bounds
|
|
|
* @param corner
|
|
|
* @param alphaValue
|
|
|
- * @return The manipulated image data that is the same instance that is specified by the parameter {@link #imageData}.
|
|
|
+ * @return The manipulated image data that is the same instance that is
|
|
|
+ * specified by the parameter {@link #imageData}.
|
|
|
*/
|
|
|
- public ImageData maskAlphaAsRoundedrectangle(ImageData imageData, Dimension corner, int alphaValue) {
|
|
|
+ public ImageData maskAlphaAsRoundedrectangle(ImageData imageData,
|
|
|
+ Dimension corner, int alphaValue) {
|
|
|
|
|
|
byte[] alphaData = imageData.alphaData;
|
|
|
int width = imageData.width;
|
|
|
int height = imageData.height;
|
|
|
int r = corner.width / 2;
|
|
|
- double r_square = r*r;
|
|
|
+ double r_square = r * r;
|
|
|
byte[] alphaPixel = new byte[r];
|
|
|
- Arrays.fill(alphaPixel, (byte)alphaValue);
|
|
|
-
|
|
|
- // make sure that the corner radius is smaller than the image dimensions and make it smaller if necessary
|
|
|
- r = Math.min(r, Math.min(imageData.height, imageData.width)/2);
|
|
|
-
|
|
|
- for (int i=0; i<r; i++) {
|
|
|
- // calculate pixel
|
|
|
- int p = r- (int) Math.sqrt(r_square - (double)((i)*(i)));
|
|
|
+ Arrays.fill(alphaPixel, (byte) alphaValue);
|
|
|
+
|
|
|
+ // make sure that the corner radius is smaller than the image dimensions
|
|
|
+ // and make it smaller if necessary
|
|
|
+ r = Math.min(r, Math.min(imageData.height, imageData.width) / 2);
|
|
|
+
|
|
|
+ for (int i = 0; i < r; i++) {
|
|
|
+ // calculate pixel
|
|
|
+ int p = r - (int) Math.sqrt(r_square - (double) ((i) * (i)));
|
|
|
// mask corners ...
|
|
|
- if (p>0) {
|
|
|
- System.arraycopy(alphaPixel, 0, alphaData,
|
|
|
- (r-(i+1))*width, p);
|
|
|
- System.arraycopy(alphaPixel, 0, alphaData,
|
|
|
- (r-(i+1))*width + (width-p), p);
|
|
|
- System.arraycopy(alphaPixel, 0, alphaData,
|
|
|
- ((height - (r-(i))))*width, p);
|
|
|
- System.arraycopy(alphaPixel, 0, alphaData,
|
|
|
- ((height - (r-(i))))*width + (width-p), p);
|
|
|
+ if (p > 0) {
|
|
|
+ System.arraycopy(alphaPixel, 0, alphaData, (r - (i + 1))
|
|
|
+ * width, p);
|
|
|
+ System.arraycopy(alphaPixel, 0, alphaData, (r - (i + 1))
|
|
|
+ * width + (width - p), p);
|
|
|
+ System.arraycopy(alphaPixel, 0, alphaData,
|
|
|
+ ((height - (r - (i)))) * width, p);
|
|
|
+ System.arraycopy(alphaPixel, 0, alphaData,
|
|
|
+ ((height - (r - (i)))) * width + (width - p), p);
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
return imageData;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
*
|
|
|
* @param graphics
|
|
|
* @return
|
|
|
*/
|
|
|
- protected ImageData calculateVerticalRoundedRectangleLinearColorGradient(Rectangle bounds, Dimension corner, RGB c1, RGB c2) {
|
|
|
-
|
|
|
+ protected ImageData calculateVerticalRoundedRectangleLinearColorGradient(
|
|
|
+ Rectangle bounds, Dimension corner, RGB c1, RGB c2) {
|
|
|
|
|
|
PaletteData pd = new PaletteData(0xFF0000, 0xFF00, 0xFF);
|
|
|
- byte[] data = new byte[3*bounds.width * bounds.height];
|
|
|
-
|
|
|
- for(int i=0; i<bounds.width; i++){
|
|
|
- double ratio = (double)i / (double)bounds.width;
|
|
|
+ byte[] data = new byte[3 * bounds.width * bounds.height];
|
|
|
+
|
|
|
+ for (int i = 0; i < bounds.width; i++) {
|
|
|
+ double ratio = (double) i / (double) bounds.width;
|
|
|
int red = (int) (c1.red * (1 - ratio) + c2.red * ratio);
|
|
|
int green = (int) (c1.green * (1 - ratio) + c2.green * ratio);
|
|
|
int blue = (int) (c1.blue * (1 - ratio) + c2.blue * ratio);
|
|
|
- data[i*3+0] = (byte) red;
|
|
|
- data[i*3+1] = (byte) green;
|
|
|
- data[i*3+2] = (byte) blue;
|
|
|
+ data[i * 3 + 0] = (byte) red;
|
|
|
+ data[i * 3 + 1] = (byte) green;
|
|
|
+ data[i * 3 + 2] = (byte) blue;
|
|
|
}
|
|
|
-
|
|
|
- for(int i=1; i<bounds.height; i++){
|
|
|
- System.arraycopy(data, 0, data, i*3*bounds.width, 3*bounds.width);
|
|
|
+
|
|
|
+ for (int i = 1; i < bounds.height; i++) {
|
|
|
+ System.arraycopy(data, 0, data, i * 3 * bounds.width,
|
|
|
+ 3 * bounds.width);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
int r = corner.width / 2;
|
|
|
- double r_square = r*r;
|
|
|
+ double r_square = r * r;
|
|
|
byte[] alphaPixel = new byte[r * 3];
|
|
|
- Arrays.fill(alphaPixel, (byte)0);
|
|
|
-
|
|
|
- for (int i=0; i<r; i++) {
|
|
|
- // calculate pixel
|
|
|
- int p = r- (int) Math.sqrt(r_square - (double)((i)*(i)));
|
|
|
+ Arrays.fill(alphaPixel, (byte) 0);
|
|
|
+
|
|
|
+ for (int i = 0; i < r; i++) {
|
|
|
+ // calculate pixel
|
|
|
+ int p = r - (int) Math.sqrt(r_square - (double) ((i) * (i)));
|
|
|
// mask corners ...
|
|
|
- if (p>0) {
|
|
|
- System.arraycopy(alphaPixel, 0, data,
|
|
|
- (r-(i+1))*3*bounds.width, p*3);
|
|
|
- System.arraycopy(alphaPixel, 0, data,
|
|
|
- (r-(i+1))*3*bounds.width + (bounds.width-p)*3, p*3);
|
|
|
- System.arraycopy(alphaPixel, 0, data,
|
|
|
- ((bounds.height - (r-(i))))*3*bounds.width, p*3);
|
|
|
- System.arraycopy(alphaPixel, 0, data,
|
|
|
- ((bounds.height - (r-(i))))*3*bounds.width + (bounds.width-p)*3, p*3);
|
|
|
+ if (p > 0) {
|
|
|
+ System.arraycopy(alphaPixel, 0, data, (r - (i + 1)) * 3
|
|
|
+ * bounds.width, p * 3);
|
|
|
+ System.arraycopy(alphaPixel, 0, data, (r - (i + 1)) * 3
|
|
|
+ * bounds.width + (bounds.width - p) * 3, p * 3);
|
|
|
+ System.arraycopy(alphaPixel, 0, data,
|
|
|
+ ((bounds.height - (r - (i)))) * 3 * bounds.width, p * 3);
|
|
|
+ System.arraycopy(alphaPixel, 0, data,
|
|
|
+ ((bounds.height - (r - (i)))) * 3 * bounds.width
|
|
|
+ + (bounds.width - p) * 3, p * 3);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- ImageData id = new ImageData(bounds.width, bounds.height, 24, pd, 3, data);
|
|
|
+
|
|
|
+ ImageData id = new ImageData(bounds.width, bounds.height, 24, pd, 3,
|
|
|
+ data);
|
|
|
id.transparentPixel = 0;
|
|
|
|
|
|
return id;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
}
|