Java SWT 图像 PaletteData 索引图和直接图

索引图(Indexed palette):

就是在palette中定义了一个RGB的数组,然后,每一个像素点都是一个RGB数组的坐标来到palette中去取值。

public class PaletteIndexExample {
	static Display display;

	public void drawImage(final Image image) {
		Shell shell = new Shell (display);
		shell.setLayout (new FillLayout ());
		shell.setSize(400, 300);
		shell.setLocation(600,300);
		Canvas canvas = new Canvas (shell, SWT.NONE);
		canvas.addPaintListener (new PaintListener () {
			public void paintControl (PaintEvent e) {
				e.gc.drawImage (image, 20, 20);
			}
		});

		shell.open ();
		while (!shell.isDisposed ()) {
			if (!display.readAndDispatch ())
				display.sleep ();
		}
	}

	public Image createIndexImage() {
		RGB redRGB = new RGB(255,0,0);
		RGB greenRGB = new RGB(0,255,0);
		PaletteData paletteData = new PaletteData(new RGB[]{redRGB,greenRGB});

		ImageData imageData = new ImageData(48,48,1,paletteData);
		for(int x=11;x<35;x++){
			for(int y=11;y<35;y++){
				imageData.setPixel(x,y,1);
			}
		}
		return new Image(display,imageData);
	}

	public static void main(String[] args) {
		display = new Display();
		PaletteIndexExample e = new PaletteIndexExample();
		e.drawImage(e.createIndexImage());
	}
}

 

 

直接图(Direct palette):

ImageData中的data存的直接的RGB,但这个RGB怎么对应的是有Palette的(redMask, greenMask, blueMask)来决定的,如下面的(redMask, greenMask, blueMask)为(0xFF0000   , 0xFF00   , 0xFF),这样在利用ImagaData的setPixel(int)的时候,如imageData.setPixel(x,y,0xFF0055),(x,y)这个像素点的red设置成的FF、green设置成了00、blue设置成了55.

public class PaletteDirectExample {

	static Display display;

	public void drawImage(final Image image) {
		Shell shell = new Shell (display);
		shell.setLayout (new FillLayout ());
		shell.setSize(400, 300);
		shell.setLocation(600,300);
		Canvas canvas = new Canvas (shell, SWT.NONE);
		canvas.addPaintListener (new PaintListener () {
			public void paintControl (PaintEvent e) {
				e.gc.drawImage (image, 20, 20);
			}
		});

		shell.open ();
		while (!shell.isDisposed ()) {
			if (!display.readAndDispatch ())
				display.sleep ();
		}
	}

	public Image createIndexImage() {
		// ***                    PaletteData(redMask, greenMask, blueMask)
		PaletteData palette = new PaletteData(0xFF0000   , 0xFF00   , 0xFF);

		ImageData imageData = new ImageData(48,48,24,palette);
		for (int x=0;x<48;x++) {
			for(int y=0;y<48;y++) {
				if(y > 11 && y < 35 && x > 11 && x < 35) {
					imageData.setPixel(x,y,0xFFFFFF);   // Set the center to green
				} else {
					imageData.setPixel(x,y,0xFF);   // and everything else to red
				}
			}
		};
		return new Image(display,imageData);
	}

	public static void main(String[] args) {
		display = new Display();
		PaletteDirectExample e = new PaletteDirectExample();
		e.drawImage(e.createIndexImage());
	}

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值