2013-08-22 9 views
10

Quindi vedo che ci sono alcune nuove (ish) funzioni proposte; toDataURLHD, toBlobHD, getImageDataHD, ecc. Che "restituisce [dati] alla risoluzione bitmap tela nativa" (http://developers.whatwg.org/the-canvas-element.html).toDataURL vs toDataURLHD

Ma non capisco la terminologia. Ciò significa che ci sono situazioni in cui le versioni non-HD ridimensioneranno i dati dell'immagine prima di restituirli? (Ad esempio, su un display ad alta risoluzione toDataURL può produrre un'immagine di qualità inferiore rispetto alla tela effettiva) o si tratta solo dei metadati pixel per pollice nell'immagine?

Ho sperimentato il maggior numero di metodi di ridimensionamento che riesco a pensare (violino: http://jsfiddle.net/SktKQ/) e sembra sempre essere pixel per pixel, ma questo non è certo conclusivo e non ho accesso a nessun livello -resoluzione per testare.

Tutto quello che sto cercando è: posso contare su toDataURL & Co. produzione di pixel-per-pixel copie del mio tela, che hanno larghezza e l'altezza esattamente uguale alla attributi set sull'elemento? (E se sì, qual è il punto delle versioni HD?)

risposta

4

WhatWG documents on canvas dire quanto segue:

La dimensione del punto dello spazio non rappresenta necessariamente la dimensione del reale bitmap che l'user agent userà internamente o durante il rendering. Sui display ad alta definizione , ad esempio, l'agente utente può utilizzare internamente bitmap con due pixel del dispositivo per unità nello spazio delle coordinate, in modo che il rendering rimanga di alta qualità per tutto il tempo. L'anti-aliasing può essere implementato in modo simile utilizzando un campionamento eccessivo con bitmap di una risoluzione maggiore rispetto all'immagine finale sul display.

E

Il metodo toDataURL() restituisce i dati con una risoluzione di 96 dpi. Il metodo toDataURLHD() lo restituisce alla risoluzione bitmap della tela nativa.

Come ho capito questo è che il toDataURL restituisce solo i pixel CSS (a 96 DPI); ma l'implementazione è libera di utilizzare una densità di pixel più alta che sarebbe visibile solo tramite toDataURLHD. Cioè, anche se definisci la tua tela come 800x600, essendo una dimensione pixel CSS, un'implementazione potrebbe effettivamente utilizzare una densità di 192 DPI (1600x1200); se si utilizza il primo, si ottiene 800x600, mentre il metodo HD otterrebbe i pixel effettivi, garantito.

Inoltre la seguente legge:

Così, nel contesto 2D, chiamando il metodo drawImage() per rendere l'output del metodo toDataURLHD() alla tela, date le dimensioni appropriate, ha nessun effetto visibile.

Tuttavia non è garantito che l'utilizzo dei dati di immagine da toDataURL non abbia un effetto visibile (essendo di risoluzione peggiore).

+0

Non una possibilità a cui avevo pensato.Quindi, se imposto una tela su 100x100 su un display con risoluzione 2x, I * potrebbe * ottenere effettivamente una tela con una dimensione di 200x200 (visualizzata a 100x100). In tal caso, 'toDataURL' darebbe un'immagine di dimensione 100x100 (ridotta di qualche metodo), ma' toDataURLHD' darebbe l'immagine 200x200 pixel per pixel. Si adatta alla tua comprensione? (domanda correlata: posso forzare a non produrre un'immagine più grande su display ad alta risoluzione?) – Dave

+0

Penso che sia comprensibile anche a me, tuttavia leggo solo i documenti. Penso che questo sia per dispositivi come i nuovi display retina su materiale Apple; possono utilizzare le funzionalità di rendering estese dei dispositivi e allo stesso tempo disporre nello stesso modo. –

+0

Per quanto riguarda il "forzare a non produrre un'immagine più grande", non sono riuscito a trovare una risposta in entrambi i modi –

Problemi correlati