1 /*******************************************************************************
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * VTT Technical Research Centre of Finland - initial API and implementation
11 *******************************************************************************/
15 package org.simantics.utils.ui.gfx;
17 import org.eclipse.jface.resource.ImageDescriptor;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.graphics.ImageData;
20 import org.eclipse.swt.graphics.PaletteData;
21 import org.eclipse.swt.graphics.RGB;
24 * RGBAdjustmentImageDescriptor
25 * @author Toni Kalajainen
27 @SuppressWarnings("deprecation")
28 public class RGBAdjustmentImageDescriptor extends ImageDescriptor {
30 public static final PaletteData DEFAULT_PALETTEDATA =
31 new PaletteData(0x00ff0000, 0x0000ff00, 0x000000ff);
36 public RGBAdjustmentImageDescriptor(ImageDescriptor image, int r, int g, int b)
45 public ImageData getImageData() {
46 PaletteData palette = DEFAULT_PALETTEDATA;
47 ImageData orig = ImageCache.getInstance().getImage(desc).getImageData();
48 ImageData id = new ImageData(orig.width, orig.height, 24, palette);
50 PaletteData origPalette = orig.palette;
52 ImageData mask = null;
53 if (orig.getTransparencyType()==SWT.TRANSPARENCY_MASK ||
54 orig.getTransparencyType()==SWT.TRANSPARENCY_PIXEL)
55 mask = orig.getTransparencyMask();
57 for (int x=0; x<orig.width; x++)
58 for (int y=0; y<orig.height; y++) {
59 RGB rgb = origPalette.getRGB( orig.getPixel(x, y) );
61 int nr = Math.min(255, (rgb.red*r)>>8);
62 int ng = Math.min(255, (rgb.green*g)>>8);
63 int nb = Math.min(255, (rgb.blue*b)>>8);
65 rgb = new RGB( nr, ng, nb );
66 id.setPixel(x, y, palette.getPixel(rgb));
69 alpha = orig.getAlpha(x, y);
71 alpha = (mask.getPixel(x, y)==1?255:0);
72 id.setAlpha(x, y, alpha);
78 public boolean equals(Object obj) {
79 if (obj==this) return true;
80 if (!(obj instanceof RGBAdjustmentImageDescriptor))
82 RGBAdjustmentImageDescriptor other = (RGBAdjustmentImageDescriptor) obj;
83 return other.desc.equals(desc) && other.r==r && other.g==g && other.b==b;
87 public int hashCode() {
88 return desc.hashCode() ^ r^g^b;