private void readLuminance() {
			int type = sourceImage.getType();
			if (type == BufferedImage.TYPE_INT_RGB || type == BufferedImage.TYPE_INT_ARGB) {
				int[] pixels = (int[]) sourceImage.getData().getDataElements(0, 0, width, height, null);
				for (int i = 0; i < picsize; i++) {
					int p = pixels[i];
					int r = (p & 0xff0000) >> 16;
					int g = (p & 0xff00) >> 8;
					int b = p & 0xff;
					data[i] = luminance(r, g, b);
				}
			} else if (type == BufferedImage.TYPE_BYTE_GRAY) {
				byte[] pixels = (byte[]) sourceImage.getData().getDataElements(0, 0, width, height, null);
				for (int i = 0; i < picsize; i++) {
					data[i] = (pixels[i] & 0xff);
				}
			} else if (type == BufferedImage.TYPE_USHORT_GRAY) {
				short[] pixels = (short[]) sourceImage.getData().getDataElements(0, 0, width, height, null);
				for (int i = 0; i < picsize; i++) {
					data[i] = (pixels[i] & 0xffff) / 256;
				}
			} else if (type == BufferedImage.TYPE_3BYTE_BGR) {
	            byte[] pixels = (byte[]) sourceImage.getData().getDataElements(0, 0, width, height, null);
	            int offset = 0;
	            for (int i = 0; i < picsize; i++) {
	                int b = pixels[offset++] & 0xff;
	                int g = pixels[offset++] & 0xff;
	                int r = pixels[offset++] & 0xff;
	                data[i] = luminance(r, g, b);
	            }
	        } else {
				throw new IllegalArgumentException("Unsupported image type: " + type);
			}
		}