2D 캔버스에서 확대 / 축소 기능을 구현하려면 어떻게해야합니까?

Sargo Darya

나는 자바 스크립트에서 절차 적 텍스처를위한 라이브러리를 만들려고하는데 어떤 이유로 줌 기능이 작동하지 않는 이유에 대해 머리를 감쌀 수는 없습니다. 나는 많은 것을 시도했지만 원래 달성하고 싶었던 것 대신 항상 펑키 한 결과를 얻습니다. 기본적으로 노이즈 텍스처를 확대하면 모두 뭉툭하게 보이게합니다.

내 현재 구현 :

this.Zoom = function(factor) {
  var imageData, curData, newData,
    zoomFactor = Math.pow(2, factor);

  curData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);    
  newData = ctx.createImageData(curData);

  for (var y = 0; y < ctx.canvas.height; y++) {
    for (var x = 0; x < ctx.canvas.width; x++) {
      var curIndex = y * ctx.canvas.width + x;
      var targetIndex = Math.floor(y / zoomFactor + x / zoomFactor) * 4;

      newData.data[curIndex]     = curData.data[targetIndex];
      newData.data[curIndex + 1] = curData.data[targetIndex + 1];
      newData.data[curIndex + 2] = curData.data[targetIndex + 2];
      newData.data[curIndex + 3] = curData.data[targetIndex + 3];
    }
  }

  ctx.putImageData(newData, 0, 0);

  return this;
}

그리고 여기 내 JSFiddle이 있습니다 : http://jsfiddle.net/j18eqgrq/

어떤 이유로 나는이 이상한 효과를 얻고 그것에 내 머리를 감쌀 수 없습니다. targetIndex로 뭔가 엉망이 된 것 같습니다.

대니 루이 터스

내부 for 루프에서 코드는 다음과 같아야합니다.

var curIndex = y * ctx.canvas.width * 4 + x * 4;
var targetIndex = Math.floor(y / zoomFactor) * ctx.canvas.width * 4 + Math.floor(x / zoomFactor) * 4;

요소 4에서 RGBA를 고려해야하며 확대 된 이미지 인덱스도 다음을 통해 계산해야합니다. y * image_width + x

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

D3 확대 / 축소 가능한 햇살에서 확대 / 축소 수준에 따라 레이블을 지정하려면 어떻게해야합니까?

분류에서Dev

(Android Maps V2) supportMapFragment에서 확대 / 축소 구성 요소의 정렬을 +/- 버튼으로 변경하려면 어떻게해야합니까?

분류에서Dev

Oxplot 그래프에서 축을 제거하지만 확대 / 축소 및 이동 기능은 유지하려면 어떻게해야합니까?

분류에서Dev

MKMapView에 특정 확대 / 축소 수준에서 UILabel을 표시하려면 어떻게해야합니까?

분류에서Dev

Android의 Google지도에서 확대 / 축소 수준을 관리하려면 어떻게해야합니까?

분류에서Dev

키보드 크기에 따라 축소 및 확장보기를 올바르게 구현하려면 어떻게해야합니까?

분류에서Dev

웹앱에서 확대 / 축소 수준을 줄이려면 어떻게해야합니까?

분류에서Dev

버튼을 축소하려면 어떻게해야합니까?

분류에서Dev

2D 어레이에서 최대량을 표시하려면 어떻게해야합니까?

분류에서Dev

다중 파일 업로드-업로드 된 모든 파일에 대해 축소판 기능을 통합하려면 어떻게해야합니까?

분류에서Dev

다중 파일 업로드-업로드 된 모든 파일에 대해 축소판 기능을 통합하려면 어떻게해야합니까?

분류에서Dev

스크롤 가능한 목록을 최대 크기로 설정하지만 필요하지 않을 때는 축소하려면 어떻게해야합니까?

분류에서Dev

확대 / 축소 가능한 햇살 차트에서 CSV 데이터를 사용하려면 어떻게해야합니까?

분류에서Dev

테이블 텍스트 세부 정보를보기 위해 확대 / 축소 효과를 추가하려면 어떻게해야합니까?

분류에서Dev

Dart에서 기능을 확장하려면 어떻게해야합니까?

분류에서Dev

인쇄에 맞게 Chrome을 축소하려면 어떻게해야합니까?

분류에서Dev

Internet Explorer 및 Firefox에서 확대 / 축소를 비활성화하려면 어떻게해야합니까?

분류에서Dev

로그 x 축을 사용하여 SymPy에서 2D 플로팅 호출을 올바르게 작성하려면 어떻게해야합니까?

분류에서Dev

Unity, Unity 2D 및 Gnome간에 현재 세션을 전환하려면 어떻게해야합니까?

분류에서Dev

Unity, Unity 2D 및 Gnome간에 현재 세션을 전환하려면 어떻게해야합니까?

분류에서Dev

Python 3 asyncio에서 콜백 대기를 동기식으로 구현하려면 어떻게해야합니까?

분류에서Dev

ASP.NET Core 1.0에서 대량 삽입을 구현하려면 어떻게해야합니까?

분류에서Dev

노틸러스에서 .gz 파일을 최대로 압축하려면 어떻게해야합니까?

분류에서Dev

노틸러스에서 .gz 파일을 최대로 압축하려면 어떻게해야합니까?

분류에서Dev

재정의 가능한 메서드에 대한 기본 구현을 제공하려면 어떻게해야합니까?

분류에서Dev

Linux에서 드래그 앤 드롭 버그 중에 자동 스크롤에 대한 해결 방법을 구현하려면 어떻게해야합니까?

분류에서Dev

Unity 2D에서 버튼을 애니메이션하려면 어떻게해야합니까?

분류에서Dev

플렉스 항목을 행당 최대 4 개 요소까지 사용 가능한 너비로 확장하려면 어떻게해야합니까?

분류에서Dev

기본적으로 축소 된보기에서 tmux 창을 나열하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    D3 확대 / 축소 가능한 햇살에서 확대 / 축소 수준에 따라 레이블을 지정하려면 어떻게해야합니까?

  2. 2

    (Android Maps V2) supportMapFragment에서 확대 / 축소 구성 요소의 정렬을 +/- 버튼으로 변경하려면 어떻게해야합니까?

  3. 3

    Oxplot 그래프에서 축을 제거하지만 확대 / 축소 및 이동 기능은 유지하려면 어떻게해야합니까?

  4. 4

    MKMapView에 특정 확대 / 축소 수준에서 UILabel을 표시하려면 어떻게해야합니까?

  5. 5

    Android의 Google지도에서 확대 / 축소 수준을 관리하려면 어떻게해야합니까?

  6. 6

    키보드 크기에 따라 축소 및 확장보기를 올바르게 구현하려면 어떻게해야합니까?

  7. 7

    웹앱에서 확대 / 축소 수준을 줄이려면 어떻게해야합니까?

  8. 8

    버튼을 축소하려면 어떻게해야합니까?

  9. 9

    2D 어레이에서 최대량을 표시하려면 어떻게해야합니까?

  10. 10

    다중 파일 업로드-업로드 된 모든 파일에 대해 축소판 기능을 통합하려면 어떻게해야합니까?

  11. 11

    다중 파일 업로드-업로드 된 모든 파일에 대해 축소판 기능을 통합하려면 어떻게해야합니까?

  12. 12

    스크롤 가능한 목록을 최대 크기로 설정하지만 필요하지 않을 때는 축소하려면 어떻게해야합니까?

  13. 13

    확대 / 축소 가능한 햇살 차트에서 CSV 데이터를 사용하려면 어떻게해야합니까?

  14. 14

    테이블 텍스트 세부 정보를보기 위해 확대 / 축소 효과를 추가하려면 어떻게해야합니까?

  15. 15

    Dart에서 기능을 확장하려면 어떻게해야합니까?

  16. 16

    인쇄에 맞게 Chrome을 축소하려면 어떻게해야합니까?

  17. 17

    Internet Explorer 및 Firefox에서 확대 / 축소를 비활성화하려면 어떻게해야합니까?

  18. 18

    로그 x 축을 사용하여 SymPy에서 2D 플로팅 호출을 올바르게 작성하려면 어떻게해야합니까?

  19. 19

    Unity, Unity 2D 및 Gnome간에 현재 세션을 전환하려면 어떻게해야합니까?

  20. 20

    Unity, Unity 2D 및 Gnome간에 현재 세션을 전환하려면 어떻게해야합니까?

  21. 21

    Python 3 asyncio에서 콜백 대기를 동기식으로 구현하려면 어떻게해야합니까?

  22. 22

    ASP.NET Core 1.0에서 대량 삽입을 구현하려면 어떻게해야합니까?

  23. 23

    노틸러스에서 .gz 파일을 최대로 압축하려면 어떻게해야합니까?

  24. 24

    노틸러스에서 .gz 파일을 최대로 압축하려면 어떻게해야합니까?

  25. 25

    재정의 가능한 메서드에 대한 기본 구현을 제공하려면 어떻게해야합니까?

  26. 26

    Linux에서 드래그 앤 드롭 버그 중에 자동 스크롤에 대한 해결 방법을 구현하려면 어떻게해야합니까?

  27. 27

    Unity 2D에서 버튼을 애니메이션하려면 어떻게해야합니까?

  28. 28

    플렉스 항목을 행당 최대 4 개 요소까지 사용 가능한 너비로 확장하려면 어떻게해야합니까?

  29. 29

    기본적으로 축소 된보기에서 tmux 창을 나열하려면 어떻게해야합니까?

뜨겁다태그

보관