1
package org.herac.tuxguitar.gui.util;
3
import java.awt.image.BufferedImage;
4
import java.awt.image.ColorModel;
5
import java.awt.image.DirectColorModel;
6
import java.awt.image.IndexColorModel;
7
import java.awt.image.WritableRaster;
8
import java.io.ByteArrayOutputStream;
9
import java.io.OutputStream;
11
import org.eclipse.swt.graphics.ImageData;
12
import org.eclipse.swt.graphics.ImageLoader;
13
import org.eclipse.swt.graphics.PaletteData;
14
import org.eclipse.swt.graphics.RGB;
16
import com.lowagie.text.BadElementException;
17
import com.lowagie.text.Image;
19
public class ImageUtils {
21
* Escribe el ImageData en el outputStream
26
public static void writeImage(ImageData data,OutputStream outputStream,int format){
27
ImageLoader loader = new ImageLoader();
28
loader.data = new ImageData[]{data};
29
loader.save(outputStream,format);
33
* Convierte un ImageData en un array de bytes
38
public static byte[] imageToByteArray(ImageData data,int format){
39
ByteArrayOutputStream out = new ByteArrayOutputStream();
40
writeImage(data,out,format);
41
return out.toByteArray();
45
* Crea un java.awt.image.BufferedImage a partir de un ImageData
49
public static BufferedImage convertToAWT(ImageData data) {
50
ColorModel colorModel = null;
51
PaletteData palette = data.palette;
52
if (palette.isDirect) {
53
colorModel = new DirectColorModel(data.depth, palette.redMask,palette.greenMask, palette.blueMask);
54
BufferedImage bufferedImage = new BufferedImage(colorModel,colorModel.createCompatibleWritableRaster(data.width,data.height), false, null);
55
WritableRaster raster = bufferedImage.getRaster();
56
int[] pixelArray = new int[3];
57
for (int y = 0; y < data.height; y++) {
58
for (int x = 0; x < data.width; x++) {
59
int pixel = data.getPixel(x, y);
60
RGB rgb = palette.getRGB(pixel);
61
pixelArray[0] = rgb.red;
62
pixelArray[1] = rgb.green;
63
pixelArray[2] = rgb.blue;
64
raster.setPixels(x, y, 1, 1, pixelArray);
69
RGB[] rgbs = palette.getRGBs();
70
byte[] red = new byte[rgbs.length];
71
byte[] green = new byte[rgbs.length];
72
byte[] blue = new byte[rgbs.length];
73
for (int i = 0; i < rgbs.length; i++) {
75
red[i] = (byte) rgb.red;
76
green[i] = (byte) rgb.green;
77
blue[i] = (byte) rgb.blue;
79
if (data.transparentPixel != -1) {
80
colorModel = new IndexColorModel(data.depth, rgbs.length, red,green, blue, data.transparentPixel);
82
colorModel = new IndexColorModel(data.depth, rgbs.length, red,green, blue);
84
BufferedImage bufferedImage = new BufferedImage(colorModel,colorModel.createCompatibleWritableRaster(data.width,data.height), false, null);
85
WritableRaster raster = bufferedImage.getRaster();
86
int[] pixelArray = new int[1];
87
for (int y = 0; y < data.height; y++) {
88
for (int x = 0; x < data.width; x++) {
89
int pixel = data.getPixel(x, y);
90
pixelArray[0] = pixel;
91
raster.setPixel(x, y, pixelArray);
99
* Crea un com.lowagie.text.Image a partir de un ImageData
103
public static Image convertToIText(ImageData data){
105
PaletteData palette = data.palette;
106
int width = data.width;
107
int height = data.height;
109
byte bytes[] = new byte[(width * height * 3)];
110
for (int y = 0; y < height; y++) {
111
for (int x = 0; x < width; x++) {
112
RGB rgb = palette.getRGB(data.getPixel(x, y));
113
bytes[y * (width * 3) + (x * 3)] = (byte)rgb.red;
114
bytes[y * (width * 3) + (x * 3) + 1] = (byte)rgb.green;
115
bytes[y * (width * 3) + (x * 3) + 2] = (byte)rgb.blue;
118
return Image.getInstance(width,height,3,8,bytes);
119
} catch (BadElementException e) {
126
* Crea una mascara a partir de src.
133
public static ImageData applyMask(ImageData src,RGB alpha,RGB none){
134
ImageData maskData = new ImageData(src.width,src.height,1,new PaletteData(new RGB[]{ none,alpha } ));
135
for(int x = 0; x< maskData.width; x++) {
136
for(int y = 0; y < maskData.height; y++) {
137
RGB rgb = src.palette.getRGB(src.getPixel(x, y));
138
if(rgb.red == alpha.red && rgb.green == alpha.green && rgb.blue == alpha.blue){
139
maskData.setPixel(x, y, maskData.palette.getPixel(none));
141
maskData.setPixel(x, y, maskData.palette.getPixel(alpha));