के बाद, मुझे लगता है कि एक SWT छवि के लिए एक BufferedImage
धर्मान्तरित कोड का एक सा पाया (इसे पढ़ने के लिए परेशान नहीं है अभी तक):रूपांतरण
public static ImageData convertToSWT(BufferedImage bufferedImage) {
if (bufferedImage.getColorModel() instanceof DirectColorModel) {
DirectColorModel colorModel = (DirectColorModel) bufferedImage.getColorModel();
PaletteData palette = new PaletteData(
colorModel.getRedMask(),
colorModel.getGreenMask(),
colorModel.getBlueMask()
);
ImageData data = new ImageData(
bufferedImage.getWidth(),
bufferedImage.getHeight(), colorModel.getPixelSize(),
palette
);
WritableRaster raster = bufferedImage.getRaster();
int[] pixelArray = new int[3];
for (int y = 0; y < data.height; y++) {
for (int x = 0; x < data.width; x++) {
raster.getPixel(x, y, pixelArray);
int pixel = palette.getPixel(
new RGB(pixelArray[0], pixelArray[1], pixelArray[2])
);
data.setPixel(x, y, pixel);
}
}
return data;
} else if (bufferedImage.getColorModel() instanceof IndexColorModel) {
IndexColorModel colorModel = (IndexColorModel) bufferedImage.getColorModel();
int size = colorModel.getMapSize();
byte[] reds = new byte[size];
byte[] greens = new byte[size];
byte[] blues = new byte[size];
colorModel.getReds(reds);
colorModel.getGreens(greens);
colorModel.getBlues(blues);
RGB[] rgbs = new RGB[size];
for (int i = 0; i < rgbs.length; i++) {
rgbs[i] = new RGB(reds[i] & 0xFF, greens[i] & 0xFF, blues[i] & 0xFF);
}
PaletteData palette = new PaletteData(rgbs);
ImageData data = new ImageData(
bufferedImage.getWidth(),
bufferedImage.getHeight(),
colorModel.getPixelSize(),
palette
);
data.transparentPixel = colorModel.getTransparentPixel();
WritableRaster raster = bufferedImage.getRaster();
int[] pixelArray = new int[1];
for (int y = 0; y < data.height; y++) {
for (int x = 0; x < data.width; x++) {
raster.getPixel(x, y, pixelArray);
data.setPixel(x, y, pixelArray[0]);
}
}
return data;
}
return null;
}
(पाई गई: http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/ConvertsabufferedimagetoSWTImageData.htm) ।
मैंने इसका परीक्षण किया है, और यह ठीक काम करता है। समस्या यह है कि मुझे यह समझ में नहीं आता है (मेरा सबसे अच्छा अनुमान यह है कि यह हस्तांतरण करने के लिए दोनों के कच्चे डेटा इंटरफेस का उपयोग करता है)। यह मेरे लिए हुआ कि BufferedImage
ByteArrayOutputStream
पर एक बहुत ही आसान समाधान लिखना होगा, और फिर इसे ByteArrayInputStream
के साथ एक SWT छवि में वापस पढ़ें। क्या इस समाधान के साथ कोई समस्या है? गति के बारे में क्या?
यह रूपांतरण आवश्यक है क्योंकि सभी छवि आकार बदलने वाले पुस्तकालयों में एडब्ल्यूटी के लिए हैं, और फिर भी मैं एसडब्ल्यूटी के साथ छवि प्रदर्शित कर रहा हूं।
धन्यवाद!
धन्यवाद, जो मेरे प्रश्न का पूरी तरह उत्तर देता है। – Jonah