byte[] getBrushWithAA(CPBrushInfo brushInfo, float dx, float dy) {
		byte[] nonAABrush = getBrush(brushInfo);

		int intSize = (int) (brushInfo.curSize + .99f);
		int intSizeAA = (int) (brushInfo.curSize + .99f) + 1;

		for (int y = 0; y < intSizeAA; y++) {
			for (int x = 0; x < intSizeAA; x++) {
				brushAA[y * intSizeAA + x] = 0;
			}
		}

		for (int y = 0; y < intSize; y++) {
			for (int x = 0; x < intSize; x++) {
				int brushAlpha = nonAABrush[y * intSize + x] & 0xff;

				brushAA[y * intSizeAA + x] += (int) (brushAlpha * (1 - dx) * (1 - dy));
				brushAA[y * intSizeAA + (x + 1)] += (int) (brushAlpha * dx * (1 - dy));
				brushAA[(y + 1) * intSizeAA + x + 1] += (int) (brushAlpha * dx * dy);
				brushAA[(y + 1) * intSizeAA + x] += (int) (brushAlpha * (1 - dx) * dy);
			}
		}

		return brushAA;
	}