[Canvas] window.devicePixelRatio (dpr)

2024. 4. 18. 23:29·Canvas
728x90

2024.04.14 - [Canvas] - [Canvas] 캔버스 사용하기 | 캔버스 사이즈 | fillRect()

 

[Canvas] 캔버스 사용하기 | 캔버스 사이즈 | fillRect()

캔버스를 사용하기 위해 index.html을 생성하고 body 태그 안에 canvas 태그를 넣는다. 화면은 전체화면으로 바꾸고 캔버스에 색상을 넣었다. index.js를 모듈 타입으로 불러온다. DOCTYPE html> Canvas Particle

gamzaggang7.tistory.com

캔버스 사이즈에 이어 dpr에 대해 알아본다.

 

dpr은 하나의 css 픽셀을 그릴 때 사용되는 장치의 픽셀 수를 말한다. 이 윈도우 전역변수 값을 통해서 1 픽셀을 실제로 그리는데 몇 픽셀을 쓰는지 알 수 있다. 예를 들어 dpr이 2인 것은 논리적 픽셀 하나가 물리적 픽셀 두 개와 같다는 것을 의미한다. dpr이 높을 수록 더 선명한 그래픽을 보일수있다.

 

 

* 논리적 픽셀 (Logical Pixel): css 픽셀. 웹 콘텐츠를 표시하는 기본 단위로, 모바일 디바이스나 데스크톱 컴퓨터와 같은 다양한 디스플레이에서 동일한 크기로 웹 콘텐츠를 표시하기 위해 사용된다.

* 물리적 픽셀 (Physical Pixel): 실제 디스플레이의 각각의 작은 점. 디스플레이의 해상도를 결정하는 단위로, 디스플레이의 크기와 해상도에 따라 다르다.

 

현재 내 노트북의 dpr값을 콘솔로 찍어 확인한다

console.log(window.devicePixelRatio);

내 노트북의 dpr 값은 1이다.

이 값을 dpr 변수를 생성해 담아주고 canvas.width와 canvas.height에 곱해준다. 그리고 ctx.scale()을 통해 dpr값을 곱해준다.

728x90
const dpr = widdow.devicePixelRatio

const canvasWidth = 300
const canvasHeight = 300

canvas.style.width = canvasWidth + 'px'
canvas.style.height = canvasHeight + 'px'

canvas.width = canvasWidth
canvas.height = canvasHeight
ctx.scale(dpr, dpr)

이렇게 하면 dpr이 2 이상인 디스플레이에서 더 선명하게 볼 수 있다.

 

예를 들어 dpr이 2인 경우 line 6~7을 통해 캔버스의 실제 크기(물리적 크기)는 300*300이 아닌 600*600이 된다. 논리적 크기에 dpr를 곱해 고해상도 디스플레이에서도 선명하게 보일 것이다.

ctx.scale(dpr, dpr)은 캔버스의 컨텍스트를 스케일링한다. 이후에 그리는 모든 도형과 이미지가 dpr에 맞춰 조정되어 고해상도 디스플레이에서도 왜곡되지 않는다. dpr이 2일때 ctx.fillRext(0, 0, 100, 100)으로 사각형을 그려도 100*100 논리적 픽셀이 dpr을 고려해 200*200 물리적 픽셀에 그려진다.

728x90

'Canvas' 카테고리의 다른 글

[Canvas] 캔버스 resize  (0) 2024.05.22
[Canvas] dat.GUI 사용하기  (0) 2024.05.22
[Canvas] svg 필터 입히기(feGaussianBlur, feColorMatrix) | Gooey Effect  (0) 2024.05.21
[Canvas] 파티클 그리기 | 애니메이션 추가(requestAnimationFrame)  (1) 2024.05.20
[Canvas] 캔버스 사용하기 | 캔버스 사이즈 | fillRect()  (51) 2024.04.14
'Canvas' 카테고리의 다른 글
  • [Canvas] dat.GUI 사용하기
  • [Canvas] svg 필터 입히기(feGaussianBlur, feColorMatrix) | Gooey Effect
  • [Canvas] 파티클 그리기 | 애니메이션 추가(requestAnimationFrame)
  • [Canvas] 캔버스 사용하기 | 캔버스 사이즈 | fillRect()
gamzaggang7
gamzaggang7
    250x250
  • gamzaggang7
    abcdefghklpqrstuvwxyz
    gamzaggang7
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS
        • OS
        • 자료구조_알고리즘
      • Java
      • Javascript
      • Node.js
      • React
      • Vue.js
      • 코딩테스트
        • 백준-Java
        • 프로그래머스-JS
      • Canvas
      • HTML, CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    해시
    vue modal
    npm
    자바
    vue.js
    fecolormatrix
    2차원배열
    fegaussianblur
    스택
    vue animation
    Node.js
    props
    css
    백준풀이
    자바스크립트
    정렬
    자바백준풀이
    프로그래머스
    오즈코딩스쿨
    Next.js
    라우팅
    hashchange
    자바공부
    til
    BFS
    React
    서버구축
    dat.gui
    큐
    canvas
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gamzaggang7
[Canvas] window.devicePixelRatio (dpr)
상단으로

티스토리툴바