📄 imageanalyzer.java
字号:
});
// Check box to request mask display.
maskCheck = new Button(group, SWT.CHECK);
maskCheck.setText(bundle.getString("Mask"));
maskCheck.setSelection(showMask);
maskCheck.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
showMask = ((Button) event.widget).getSelection();
if (image != null) {
imageCanvas.redraw();
}
}
});
// Check box to request background display.
backgroundCheck = new Button(group, SWT.CHECK);
backgroundCheck.setText(bundle.getString("Background"));
backgroundCheck.setSelection(showBackground);
backgroundCheck.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
showBackground = ((Button) event.widget).getSelection();
}
});
// Group the animation buttons.
group = new Group(controls, SWT.NONE);
group.setLayout(new RowLayout());
group.setText(bundle.getString("Animation"));
// Push button to display the previous image in a multi-image file.
previousButton = new Button(group, SWT.PUSH);
previousButton.setText(bundle.getString("Previous"));
previousButton.setEnabled(false);
previousButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
previous();
}
});
// Push button to display the next image in a multi-image file.
nextButton = new Button(group, SWT.PUSH);
nextButton.setText(bundle.getString("Next"));
nextButton.setEnabled(false);
nextButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
next();
}
});
// Push button to toggle animation of a multi-image file.
animateButton = new Button(group, SWT.PUSH);
animateButton.setText(bundle.getString("Animate"));
animateButton.setEnabled(false);
animateButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
animate();
}
});
// Label to show the image file type.
typeLabel = new Label(shell, SWT.NONE);
typeLabel.setText(bundle.getString("Type_initial"));
typeLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Canvas to show the image.
imageCanvas = new Canvas(shell, SWT.V_SCROLL | SWT.H_SCROLL | SWT.NO_REDRAW_RESIZE | SWT.NO_BACKGROUND);
imageCanvas.setBackground(whiteColor);
imageCanvas.setCursor(crossCursor);
gridData = new GridData();
gridData.verticalSpan = 15;
gridData.horizontalAlignment = GridData.FILL;
gridData.verticalAlignment = GridData.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
imageCanvas.setLayoutData(gridData);
imageCanvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent event) {
if (image == null) {
Rectangle bounds = imageCanvas.getBounds();
event.gc.fillRectangle(0, 0, bounds.width, bounds.height);
} else {
paintImage(event);
}
}
});
imageCanvas.addMouseMoveListener(new MouseMoveListener() {
public void mouseMove(MouseEvent event) {
if (image != null) {
showColorAt(event.x, event.y);
}
}
});
// Set up the image canvas scroll bars.
ScrollBar horizontal = imageCanvas.getHorizontalBar();
horizontal.setVisible(true);
horizontal.setMinimum(0);
horizontal.setEnabled(false);
horizontal.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
scrollHorizontally((ScrollBar) event.widget);
}
});
ScrollBar vertical = imageCanvas.getVerticalBar();
vertical.setVisible(true);
vertical.setMinimum(0);
vertical.setEnabled(false);
vertical.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
scrollVertically((ScrollBar) event.widget);
}
});
// Label to show the image size.
sizeLabel = new Label(shell, SWT.NONE);
sizeLabel.setText(bundle.getString("Size_initial"));
sizeLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Label to show the image depth.
depthLabel = new Label(shell, SWT.NONE);
depthLabel.setText(bundle.getString("Depth_initial"));
depthLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Label to show the transparent pixel.
transparentPixelLabel = new Label(shell, SWT.NONE);
transparentPixelLabel.setText(bundle.getString("Transparent_pixel_initial"));
transparentPixelLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Label to show the time to load.
timeToLoadLabel = new Label(shell, SWT.NONE);
timeToLoadLabel.setText(bundle.getString("Time_to_load_initial"));
timeToLoadLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Separate the animation fields from the rest of the fields.
separator = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
separator.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Label to show the logical screen size for animation.
screenSizeLabel = new Label(shell, SWT.NONE);
screenSizeLabel.setText(bundle.getString("Animation_size_initial"));
screenSizeLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Label to show the background pixel.
backgroundPixelLabel = new Label(shell, SWT.NONE);
backgroundPixelLabel.setText(bundle.getString("Background_pixel_initial"));
backgroundPixelLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Label to show the image location (x, y).
locationLabel = new Label(shell, SWT.NONE);
locationLabel.setText(bundle.getString("Image_location_initial"));
locationLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Label to show the image disposal method.
disposalMethodLabel = new Label(shell, SWT.NONE);
disposalMethodLabel.setText(bundle.getString("Disposal_initial"));
disposalMethodLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Label to show the image delay time.
delayTimeLabel = new Label(shell, SWT.NONE);
delayTimeLabel.setText(bundle.getString("Delay_initial"));
delayTimeLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Label to show the background pixel.
repeatCountLabel = new Label(shell, SWT.NONE);
repeatCountLabel.setText(bundle.getString("Repeats_initial"));
repeatCountLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Separate the animation fields from the palette.
separator = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
separator.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Label to show if the image has a direct or indexed palette.
paletteLabel = new Label(shell, SWT.NONE);
paletteLabel.setText(bundle.getString("Palette_initial"));
paletteLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// Canvas to show the image's palette.
paletteCanvas = new Canvas(shell, SWT.BORDER | SWT.V_SCROLL | SWT.NO_REDRAW_RESIZE);
paletteCanvas.setFont(fixedWidthFont);
paletteCanvas.getVerticalBar().setVisible(true);
gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL;
gridData.verticalAlignment = GridData.FILL;
GC gc = new GC(paletteLabel);
paletteWidth = gc.stringExtent(bundle.getString("Max_length_string")).x;
gc.dispose();
gridData.widthHint = paletteWidth;
gridData.heightHint = 16 * 11; // show at least 16 colors
paletteCanvas.setLayoutData(gridData);
paletteCanvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent event) {
if (image != null)
paintPalette(event);
}
});
// Set up the palette canvas scroll bar.
vertical = paletteCanvas.getVerticalBar();
vertical.setVisible(true);
vertical.setMinimum(0);
vertical.setIncrement(10);
vertical.setEnabled(false);
vertical.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
scrollPalette((ScrollBar) event.widget);
}
});
// Sash to see more of image or image data.
sash = new Sash(shell, SWT.HORIZONTAL);
gridData = new GridData();
gridData.horizontalSpan = 2;
gridData.horizontalAlignment = GridData.FILL;
sash.setLayoutData(gridData);
sash.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
if (event.detail != SWT.DRAG) {
((GridData) paletteCanvas.getLayoutData()).heightHint = SWT.DEFAULT;
Rectangle paletteCanvasBounds = paletteCanvas.getBounds();
int minY = paletteCanvasBounds.y + 20;
Rectangle dataLabelBounds = dataLabel.getBounds();
int maxY = statusLabel.getBounds().y - dataLabelBounds.height - 20;
if (event.y > minY && event.y < maxY) {
Rectangle oldSash = sash.getBounds();
sash.setBounds(event.x, event.y, event.width, event.height);
int diff = event.y - oldSash.y;
Rectangle bounds = imageCanvas.getBounds();
imageCanvas.setBounds(bounds.x, bounds.y, bounds.width, bounds.height + diff);
bounds = paletteCanvasBounds;
paletteCanvas.setBounds(bounds.x, bounds.y, bounds.width, bounds.height + diff);
bounds = dataLabelBounds;
dataLabel.setBounds(bounds.x, bounds.y + diff, bounds.width, bounds.height);
bounds = dataText.getBounds();
dataText.setBounds(bounds.x, bounds.y + diff, bounds.width, bounds.height - diff);
// shell.layout(true);
}
}
}
});
// Label to show data-specific fields.
dataLabel = new Label(shell, SWT.NONE);
dataLabel.setText(bundle.getString("Pixel_data_initial"));
gridData = new GridData();
gridData.horizontalSpan = 2;
gridData.horizontalAlignment = GridData.FILL;
dataLabel.setLayoutData(gridData);
// Text to show a dump of the data.
dataText = new StyledText(shell, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL);
dataText.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
dataText.setFont(fixedWidthFont);
gridData = new GridData();
gridData.horizontalSpan = 2;
gridData.horizontalAlignment = GridData.FILL;
gridData.verticalAlignment = GridData.FILL;
gridData.heightHint = 128;
gridData.grabExcessVerticalSpace = true;
dataText.setLayoutData(gridData);
dataText.addMouseListener(new MouseAdapter() {
public void mouseDown(MouseEvent event) {
if (image != null && event.button == 1) {
showColorForData();
}
}
});
dataText.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent event) {
if (image != null) {
showColorForData();
}
}
});
// Label to show status and cursor location in image.
statusLabel = new Label(shell, SWT.NONE);
statusLabel.setText("");
gridData = new GridData();
gridData.horizontalSpan = 2;
gridData.horizontalAlignment = GridData.FILL;
statusLabel.setLayoutData(gridData);
}
Menu createMenuBar() {
// Menu bar.
Menu menuBar = new Menu(shell, SWT.BAR);
shell.setMenuBar(menuBar);
createFileMenu(menuBar);
createAlphaMenu(menuBar);
return menuBar;
}
void createFileMenu(Menu menuBar) {
// File menu
MenuItem item = new MenuItem(menuBar, SWT.CASCADE);
item.setText(bundle.getString("File"));
Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);
item.setMenu(fileMenu);
// File -> Open File...
item = new MenuItem(fileMenu, SWT.PUSH);
item.setText(bundle.getString("OpenFile"));
item.setAccelerator(SWT.MOD1 + 'O');
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
menuOpenFile();
}
});
// File -> Open URL...
item = new MenuItem(fileMenu, SWT.PUSH);
item.setText(bundle.getString("OpenURL"));
item.setAccelerator(SWT.MOD1 + 'U');
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
menuOpenURL();
}
});
// File -> Reopen
item = new MenuItem(fileMenu, SWT.PUSH);
item.setText(bundle.getString("Reopen"));
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
menuReopen();
}
});
new MenuItem(fileMenu, SWT.SEPARATOR);
// File -> Load File... (natively)
item = new MenuItem(fileMenu, SWT.PUSH);
item.setText(bundle.getString("LoadFile"));
item.setAccelerator(SWT.MOD1 + 'L');
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
menuLoad();
}
});
new MenuItem(fileMenu, SWT.SEPARATOR);
// File -> Save
item = new MenuItem(fileMenu, SWT.PUSH);
item.setText(bundle.getString("Save"));
item.setAccelerator(SWT.MOD1 + 'S');
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
menuSave();
}
});
// File -> Save As...
item = new MenuItem(fileMenu, SWT.PUSH);
item.setText(bundle.getString("Save_as"));
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
menuSaveAs();
}
});
// File -> Save Mask As...
item = new MenuItem(fileMenu, SWT.PUSH);
item.setText(bundle.getString("Save_mask_as"));
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
menuSaveMaskAs();
}
});
new MenuItem(fileMenu, SWT.SEPARATOR);
// File -> Print
item = new MenuItem(fileMenu, SWT.PUSH);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -