public void WipeIn(CImage image, Rectangle rect, int count) {
		Graphics g = _bmd.getGraphics();		
		count = count % 8;
		if (count < 0) {
			count = count + 8;
		}
		Rectangle rect2 = (Rectangle)rect.clone();
		if (rect2.x < 0)
			rect2.x = 0;
		if (rect2.x + rect2.width > image.Width())
			rect2.width = image.Width() - rect2.x;
		if (rect2.x + rect2.width > this.Width())
			rect2.width = this.Width() - rect2.x;
		int[] pixels = new int[rect2.width * rect2.height];
		_bmd.getRGB(rect2.x, rect2.y, rect2.width, rect2.height, pixels, 0, rect2.width);
		int[] img_pixels = new int[rect2.width * rect2.height];
		image._bmd.getRGB(rect2.x, rect2.y, rect2.width, rect2.height, img_pixels, 0, rect2.width);
		int[] pixels2 = new int[rect2.width * rect2.height];
		int w = rect2.width;
		int y = 0;
		int pixels_position = 0;
		int pixels2_position = 0;
		int img_pixels_position = 0;
		while (pixels_position < pixels.length) {
			if (y % 8 <= count) {
				//System.out.println("draw " + y + "/" + count + "," + (rect.x) + "," + (rect.y + y) + "," + (rect.x + rect.width) + "," + (rect.y + y + 1));
				g.drawImage(image._bmd,
						rect.x, rect.y + y, rect.x + rect.width, rect.y + y + 1, 
						rect.x, rect.y + y, rect.x + rect.width, rect.y + y + 1, 
						null);
				//System.arraycopy(img_pixels, img_pixels_position, pixels2, pixels2_position, w);
				pixels2_position += w;
				img_pixels_position += w;
				pixels_position += w;
			} else {
				//System.arraycopy(pixels, pixels_position, pixels2, pixels2_position, w);
				pixels2_position += w;
				img_pixels_position += w;
				pixels_position += w;
			}
			y++;
		}
		//_bmd.setRGB(rect2.x, rect2.y, rect2.width, rect2.height, pixels2, 0, rect2.width);
		g.dispose();
	}