브라우저 렌더링에 포함 된 기능을 비활성화 할 수 없기 때문에 HTML5 캔버스의 선, 두꺼운 선, 원, 사각형 등의 기본 기본 사항을 처리하는 라이브러리를 작성해야합니다. 핵심 캔버스 알고리즘HMTL5 앤티 앨리어싱 브라우저 비활성화
HTML5 캔버스 렌더링 프로세스를 처음부터 만들어야합니까? 내가 누구야, 나에게이 일을 맡길 사람이 있니? 누가 세상을 바꾸고 싶습니까?
HTML5로 작성된 간단한 그리기 응용 프로그램을 생각해보십시오 ... 모양을 그리십시오 ... 원형, 자유형, 원보다 양파와 같은 닫힌 모양 (글쎄, 그건 내 모습이 될 것입니다!) ... 그런 다음 페인트 통 아이콘을 선택하고 그린 모양을 클릭하여 원하는 색상으로 채울 것으로 예상하십시오.
"페인트 통"을 선택하고 모양 중간에 클릭하면 모양이 채워지는 것을 상상해보십시오.하지만, 그다지 ... ... HANG ON ...이게 옳지 않습니다! !! !! 그린 모양의 가장자리 안쪽에는 배경색과 채우기 색상 및 가장자리 색상 사이의 흐림 효과가 있습니다. 채우기에는 결함이있는 것 같습니다.
직선의 "페인트 통"/ "채우기"를 원했지만 ... 모양을 그려서 색상으로 채우기를 원했지만 ... 소란스럽지 않았습니다. 당신이 선택한 색깔로.
웹 브라우저는 모양을 정의하기 위해 선을 그릴 때 앤티 앨리어싱을 결정합니다. 모양에 검은 선을 그으면 ... 브라우저는 모서리를 따라 회색 픽셀을 그려서 더 좋은 선으로 보이게 만듭니다.
그래, 더 나은 라인은 * * 페인트/홍수 채우기 프로세스입니다.
브라우저 개발자가 앤티 앨리어싱 렌더링을 사용하지 않도록 속성을 노출하는 데 드는 비용은 얼마입니까? 비활성화하면 렌더링 엔진에 밀리 초가 절약됩니다.
바하마, Bresenham 라인 렌더링 알고리즘을 사용하여 내 캔버스 렌더링 엔진을 구축하고 싶지는 않습니다 ... 어떻게 될 수 있습니까? 변경 될 수있는 방법은 무엇입니까? ??? WC3를 겨냥한 청원서를 제출해야합니까? 관심이 있다면 당신의 이름을 포함 하시겠습니까 ??? 나는 야 -
업데이트]
function DrawLine(objContext, FromX, FromY, ToX, ToY) {
var dx = Math.abs(ToX - FromX);
var dy = Math.abs(ToY - FromY);
var sx = (FromX < ToX) ? 1 : -1;
var sy = (FromY < ToY) ? 1 : -1;
var err = dx - dy;
var CurX, CurY;
CurX = FromX;
CurY = FromY;
while (true) {
objContext.fillRect(CurX, CurY, objContext.lineWidth, objContext.lineWidth);
if ((CurX == ToX) && (CurY == ToY)) break;
var e2 = 2 * err;
if (e2 > -dy) { err -= dy; CurX += sx; }
if (e2 < dx) { err += dx; CurY += sy; }
}
}
글쎄, 나는 같은 결론을 내렸고, 현재이 기본 작업을 수행하는 RetroJS에서 일하고있다. (만약 누군가가 co-op/take를하고 싶다면 나의 블로그에서 내 사용자 정보로 이동하여 이메일을 남긴다.) 경로 객체에 대한 앤티 앨리어스를 해제 할 수는 없으며 이미지 크기 조정에만 사용할 수 있습니다. – K3N
안녕하세요 켄, 알았습니다. 제가 프로젝트에 진전을 보였을 때 기여할 것이 있는지 확인할 수 있습니다. 이 단계에서는 Bresenham의 알고리즘을 기반으로하는 매우 기본적인 선 그리기 과정이 있습니다 ... "fillRect"메서드를 사용하여 단일 픽셀 또는 두꺼운 선을 그립니다. 정말 이상적은 아니지만 더 두꺼운 선, 거대한 두툼한 정사각형으로 끝나지 않습니다. 하지만 가장 중요한 점은 앤티 앨리어스가 나타나지 않아 홍수 채우기/페인트가 예상대로 작동한다는 것입니다. ... 다음 코드를 게시합니다 ... –
function DrawLine (objContext, FromX, FromY, ToX, ToY) { var dx = Math.abs (ToX - FromX); var dy = Math.abs (ToY - FromY); var sx = (FromX -dy) {err - = dy; CurX + = sx; } if (e2