⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imageanalyzer.java

📁 SWT开发例子
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
			loader = new ImageLoader();			if (incremental) {				// Prepare to handle incremental events.				loader.addImageLoaderListener(new ImageLoaderListener() {					public void imageDataLoaded(ImageLoaderEvent event) {						incrementalDataLoaded(event);					}				});				incrementalThreadStart();			}			// Read the new image(s) from the chosen file.			long startTime = System.currentTimeMillis();			imageDataArray = loader.load(filename);			loadTime = System.currentTimeMillis() - startTime;			if (imageDataArray.length > 0) {				// Cache the filename.				currentName = filename;				fileName = filename;								// If there are multiple images in the file (typically GIF)				// then enable the Previous, Next and Animate buttons.				previousButton.setEnabled(imageDataArray.length > 1);				nextButton.setEnabled(imageDataArray.length > 1);				animateButton.setEnabled(imageDataArray.length > 1 && loader.logicalScreenWidth > 0 && loader.logicalScreenHeight > 0);					// Display the first image in the file.				imageDataIndex = 0;				displayImage(imageDataArray[imageDataIndex]);				resetScrollBars();			}		} catch (SWTException e) {			showErrorDialog(bundle.getString("Loading_lc"), filename, e);		} catch (SWTError e) {			showErrorDialog(bundle.getString("Loading_lc"), filename, e);		} finally {			shell.setCursor(null);			imageCanvas.setCursor(crossCursor);			waitCursor.dispose();		}	}		void menuOpenURL() {		animate = false; // stop any animation in progress		resetScaleCombos();				// Get the user to choose an image URL.		TextPrompter textPrompter = new TextPrompter(shell, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);		textPrompter.setText(bundle.getString("OpenURLDialog"));		textPrompter.setMessage(bundle.getString("EnterURL"));		String urlname = textPrompter.open();		if (urlname == null) return;		Cursor waitCursor = new Cursor(display, SWT.CURSOR_WAIT);		shell.setCursor(waitCursor);		imageCanvas.setCursor(waitCursor);		try {			URL url = new URL(urlname);			InputStream stream = url.openStream();			loader = new ImageLoader();			if (incremental) {				// Prepare to handle incremental events.				loader.addImageLoaderListener(new ImageLoaderListener() {					public void imageDataLoaded(ImageLoaderEvent event) {						incrementalDataLoaded(event);					}				});				incrementalThreadStart();			}			// Read the new image(s) from the chosen file.			long startTime = System.currentTimeMillis();			imageDataArray = loader.load(stream);			loadTime = System.currentTimeMillis() - startTime;			if (imageDataArray.length > 0) {				currentName = urlname;				fileName = null;								// If there are multiple images in the file (typically GIF)				// then enable the Previous, Next and Animate buttons.				previousButton.setEnabled(imageDataArray.length > 1);				nextButton.setEnabled(imageDataArray.length > 1);				animateButton.setEnabled(imageDataArray.length > 1 && loader.logicalScreenWidth > 0 && loader.logicalScreenHeight > 0);					// Display the first image in the file.				imageDataIndex = 0;				displayImage(imageDataArray[imageDataIndex]);				resetScrollBars();			}		} catch (Exception e) {			showErrorDialog(bundle.getString("Loading_lc"), urlname, e);		} finally {			shell.setCursor(null);			imageCanvas.setCursor(crossCursor);			waitCursor.dispose();		}	}	/*	 * Called to start a thread that draws incremental images	 * as they are loaded.	 */	void incrementalThreadStart() {		incrementalEvents = new Vector();		incrementalThread = new Thread("Incremental") {			public void run() {				// Draw the first ImageData increment.				while (incrementalEvents != null) {					// Synchronize so we don't try to remove when the vector is null.					synchronized (ImageAnalyzer.this) {						if (incrementalEvents != null) {							if (incrementalEvents.size() > 0) {								ImageLoaderEvent event = (ImageLoaderEvent) incrementalEvents.remove(0);								if (image != null) image.dispose();								image = new Image(display, event.imageData);								imageData = event.imageData;								imageCanvasGC.drawImage(									image,									0,									0,									imageData.width,									imageData.height,									imageData.x,									imageData.y,									imageData.width,									imageData.height);							} else {								yield();							}						}					}				}				display.wake();			}		};		incrementalThread.setDaemon(true);		incrementalThread.start();	}		/*	 * Called when incremental image data has been loaded,	 * for example, for interlaced GIF/PNG or progressive JPEG.	 */	void incrementalDataLoaded(ImageLoaderEvent event) {		// Synchronize so that we do not try to add while		// the incremental drawing thread is removing.		synchronized (this) {			incrementalEvents.addElement(event);		}	}		void menuSave() {		if (image == null) return;		animate = false; // stop any animation in progress		// If the image file type is unknown, we can't 'Save',		// so we have to use 'Save As...'.		if (imageData.type == SWT.IMAGE_UNDEFINED || fileName == null) {			menuSaveAs();			return;		}		Cursor waitCursor = new Cursor(display, SWT.CURSOR_WAIT);		shell.setCursor(waitCursor);		imageCanvas.setCursor(waitCursor);		try {			// Save the current image to the current file.			loader.data = new ImageData[] {imageData};			loader.save(fileName, imageData.type);					} catch (SWTException e) {			showErrorDialog(bundle.getString("Saving_lc"), fileName, e);		} catch (SWTError e) {			showErrorDialog(bundle.getString("Saving_lc"), fileName, e);		} finally {			shell.setCursor(null);			imageCanvas.setCursor(crossCursor);			waitCursor.dispose();		}	}	void menuSaveAs() {		if (image == null) return;		animate = false; // stop any animation in progress		// Get the user to choose a file name and type to save.		FileDialog fileChooser = new FileDialog(shell, SWT.SAVE);		fileChooser.setFilterPath(lastPath);		if (fileName != null) {			String name = fileName;			int nameStart = name.lastIndexOf(java.io.File.separatorChar);			if (nameStart > -1) {				name = name.substring(nameStart + 1);			}			fileChooser.setFileName(name);		}		fileChooser.setFilterExtensions(new String[] { "*.bmp", "*.gif", "*.ico", "*.jpg", "*.png" });		fileChooser.setFilterNames(new String[] { "BMP (*.bmp)", "GIF (*.gif)", "ICO (*.ico)", "JPEG (*.jpg)", "PNG (*.png)" });		String filename = fileChooser.open();		lastPath = fileChooser.getFilterPath();		if (filename == null)			return;		// Figure out what file type the user wants saved.		// We need to rely on the file extension because FileDialog		// does not have API for asking what filter type was selected.		int filetype = determineFileType(filename);		if (filetype == SWT.IMAGE_UNDEFINED) {			MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);			box.setMessage(createMsg(bundle.getString("Unknown_extension"), 			                         filename.substring(filename.lastIndexOf('.') + 1)));			box.open();			return;		}				if (new java.io.File(filename).exists()) {			MessageBox box = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);			box.setMessage(createMsg(bundle.getString("Overwrite"), filename));			if (box.open() == SWT.CANCEL)				return;		}				Cursor waitCursor = new Cursor(display, SWT.CURSOR_WAIT);		shell.setCursor(waitCursor);		imageCanvas.setCursor(waitCursor);		try {			// Save the current image to the specified file.			loader.data = new ImageData[] {imageData};			loader.save(filename, filetype);						// Update the shell title and file type label,			// and use the new file.			fileName = filename;			shell.setText(createMsg(bundle.getString("Analyzer_on"), filename));			typeLabel.setText(createMsg(bundle.getString("Type_string"), fileTypeString(filetype)));		} catch (SWTException e) {			showErrorDialog(bundle.getString("Saving_lc"), filename, e);		} catch (SWTError e) {			showErrorDialog(bundle.getString("Saving_lc"), filename, e);		} finally {			shell.setCursor(null);			imageCanvas.setCursor(crossCursor);			waitCursor.dispose();		}	}	void menuSaveMaskAs() {		if (image == null || !showMask) return;		if (imageData.getTransparencyType() == SWT.TRANSPARENCY_NONE) return;		animate = false; // stop any animation in progress		// Get the user to choose a file name and type to save.		FileDialog fileChooser = new FileDialog(shell, SWT.SAVE);		fileChooser.setFilterPath(lastPath);		if (fileName != null) fileChooser.setFileName(fileName);		fileChooser.setFilterExtensions(new String[] { "*.bmp", "*.gif", "*.ico", "*.jpg", "*.png" });		fileChooser.setFilterNames(new String[] { "BMP (*.bmp)", "GIF (*.gif)", "ICO (*.ico)", "JPEG (*.jpg)", "PNG (*.png)" });		String filename = fileChooser.open();		lastPath = fileChooser.getFilterPath();		if (filename == null)			return;		// Figure out what file type the user wants saved.		// We need to rely on the file extension because FileDialog		// does not have API for asking what filter type was selected.		int filetype = determineFileType(filename);		if (filetype == SWT.IMAGE_UNDEFINED) {			MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);			box.setMessage(createMsg(bundle.getString("Unknown_extension"), 			                         filename.substring(filename.lastIndexOf('.') + 1)));			box.open();			return;		}				if (new java.io.File(filename).exists()) {			MessageBox box = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);			box.setMessage(createMsg(bundle.getString("Overwrite"), filename));			if (box.open() == SWT.CANCEL)				return;		}				Cursor waitCursor = new Cursor(display, SWT.CURSOR_WAIT);		shell.setCursor(waitCursor);		imageCanvas.setCursor(waitCursor);		try {			// Save the mask of the current image to the specified file.			ImageData maskImageData = imageData.getTransparencyMask();			loader.data = new ImageData[] {maskImageData};			loader.save(filename, filetype);					} catch (SWTException e) {			showErrorDialog(bundle.getString("Saving_lc"), filename, e);		} catch (SWTError e) {			showErrorDialog(bundle.getString("Saving_lc"), filename, e);		} finally {			shell.setCursor(null);			imageCanvas.setCursor(crossCursor);			waitCursor.dispose();		}	}	void menuPrint() {		if (image == null) return;		try {			// Ask the user to specify the printer.			PrintDialog dialog = new PrintDialog(shell, SWT.NULL);			PrinterData printerData = dialog.open();			if (printerData == null) return;						Printer printer = new Printer(printerData);			Point screenDPI = display.getDPI();			Point printerDPI = printer.getDPI();			int scaleFactor = printerDPI.x / screenDPI.x;			Rectangle trim = printer.computeTrim(0, 0, 0, 0);			if (printer.startJob(currentName)) {				if (printer.startPage()) {					GC gc = new GC(printer);					int transparentPixel = imageData.transparentPixel;					if (transparentPixel != -1 && !transparent) {						imageData.transparentPixel = -1;					}					Image printerImage = new Image(printer, imageData);					gc.drawImage(						printerImage,						0,						0,						imageData.width,						imageData.height,						-trim.x,						-trim.y,						scaleFactor * imageData.width,						scaleFactor * imageData.height);					if (transparentPixel != -1 && !transparent) {						imageData.transparentPixel = transparentPixel;					}					printerImage.dispose();					gc.dispose();					printer.endPage();				}				printer.endJob();			}			printer.dispose();		} catch (SWTError e) {			MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);			box.setMessage(bundle.getString("Printing_error") + e.getMessage());			box.open();		}	}	void menuReopen() {		if (currentName == null) return;		animate = false; // stop any animation in progress		resetScrollBars();		resetScaleCombos();		Cursor waitCursor = new Cursor(display, SWT.CURSOR_WAIT);		shell.setCursor(waitCursor);		imageCanvas.setCursor(waitCursor);		try {			loader = new ImageLoader();			long startTime = System.currentTimeMillis();			ImageData[] newImageData;			if (fileName == null) {				URL url = new URL(currentName);				InputStream stream = url.openStream();				newImageData = loader.load(stream);			} else {				newImageData = loader.load(fileName);			}			loadTime = System.currentTimeMillis() - startTime;			imageDataIndex = 0;			displayImage(newImageData[imageDataIndex]);		} catch (Exception e) {			showErrorDialog(bundle.getString("Reloading_lc"), currentName, e);		} finally {				shell.setCursor(null);			imageCanvas.setCursor(crossCursor);			waitCursor.dispose();		}	}		void changeBackground() {		String background = backgroundCombo.getText();		if (background.equals(bundle.getString("White"))) {			imageCanvas.setBackground(whiteColor);		} else if (background.equals(bundle.getString("Black"))) {			imageCanvas.setBackground(blackColor);		} else if (background.equals(bundle.getString("Red"))) {			imageCanvas.setBackground(redColor);		} else if (background.equals(bundle.getString("Green"))) {			imageCanvas.setBackground(greenColor);		} else if (background.equals(bundle.getString("Blue"))) {			imageCanvas.setBackground(blueColor);		} else {			imageCanvas.setBackground(null);		}	}		/*	 * Called when the ScaleX combo selection changes.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -