2013-06-14 11 views
5

Domanda originale:
Come si ridimensiona un'immagine in JavaScript senza supporto CSS?Ridimensionamento dell'immagine o algoritmo di duplicazione DOM in JavaScript?

La mia squadra ha un ambiente STB, una specie di cosa in formato EPG, che supporta JavaScript e DOM generati. Il supporto CSS esiste ma non possiamo inserire il nostro CSS. L'unità di misura è sempre fissa e quindi non può essere ridimensionata dal CSS.

che presentiamo immagini nel seguente modo:

  1. Ogni immagine viene mostrata come un pezzo di piccole immagini generate dal dispositivo
  2. Per un'immagine 40 x 30, ci dà 1200 pezzi di 1px x 1px , rappresentati come elementi DOM.
  3. Sono posizionati in width x height colonne e righe, all'interno di un elemento DOM padre. Sembrano più grandi su un grande schermo con grandi dimensioni fisiche dei pixel.

Guardate l'immagine qui sotto - qualcosa che ho provato in del browser per chiarezza:

Pixel representation

Si supponga che ogni blocco di cui sopra è l'immagine di per sé di 1 x 1 pixel, quindi un DOM elemento. Collettivamente ci sono sempre 40 x 30 = 1200 elementi DOM contemporaneamente.

Vogliamo ridimensionare questo in una chiamata di funzione, per raddoppiare le sue dimensioni. O almeno aggiungere 10 unità a larghezza e altezza.

Quale logica devo scrivere in JavaScript? Devo duplicare ogni elemento DOM e posizionare il duplicato accanto all'originale? Questo raddoppia solo la larghezza. Devo moltiplicare anche 4 volte per altezza? Aiuto apprezzato.

UPDATE:
Dal unica risposta, sembra che cosa ho bisogno è quello di attuare un ridimensionamento o algoritmo di duplicazione in JavaScript.

Quando si ingrandiscono le immagini in qualsiasi sistema operativo, quale algoritmo si applica a ogni pixel per raddoppiarne le dimensioni e visualizzare 1 pixel per 4 pixel hardware?

Ho bisogno di fare la stessa cosa con gli elementi DOM, dove ogni elemento span o img funge da pixel.

+1

Sì, penso che raddoppiare questi elementi sia orizzontalmente che verticalmente è l'unica strada da percorrere. Potrei sbagliare però .. –

risposta

3

Per quanto posso vedere sei limitato a due opzioni:

  • Sia il doppio della dimensione del singolo dom-pixel
  • Oppure, se ciò non fosse possibile, la scala del pixelmap oltre il doppio del numero di dom-pixel (quindi aggiungi ogni pixel due volte e copia ogni riga alla fine)

Naturalmente la prima opzione è di gran lunga la più efficiente, ma sembra che l'ambiente in cui stai lavorando sia abbastanza restrittivo, quindi presumo che ciò non sia possibile.

+0

Supponendo che io raddoppi il no. degli elementi DOM, come li posiziono e il prossimo elemento? Devo duplicare il primo 'img' e posizionarlo al posto del secondo' img'. Quindi il secondo originale "img" al posto del 3 ° e del 4 °. Quindi il quarto 'img' e così via ... Questa è un'operazione molto intensa. Qual è il modo efficace? –

+0

Se hai già una mappa completa, penso che il modo più efficace sia pronunciare 'l = row [x] .lenght' e ripetere da' l a 0' spostare 'row [x] [l * 2] = row [x ] [l]; row [x] [l * 2-1] = row [x] [l] 'in ogni ciclo. Poi, una volta che hai finito, in realtà fai lo stesso per le file piuttosto che per le celle. Almeno, questo presuppone che si tratti di una normale struttura di array e non di qualche oggetto o di un ordinamento straniero. –

+0

Ho bisogno di fare lo stesso in 2 dimensioni, separatamente per elemento colonna per riga. La complessità sarà più di 'n^2'. Qualcosa di meno di quello –

0

Se avete intenzione di utilizzare le immagini solo, non pixel, la funzione è readyly disponibili,

uso questo link

questo fornisce la migliore interpolazione dell'immagine senza alcun problema,

Se si desidera farlo manualmente,

poi doppio in fila e poi in colonna, significa prima sul piano verticale, poi verticalmente doppio,

Esempio (3x3)

XCV 
DFG 
ERT 

Diventerà questo moltiplicatore prima fila-pix

XXCCVV 
DDFFGG 
EERRTT 

poi colonna-pix moltiplicatore

XXCCVV 
XXCCVV 
DDFFGG 
XXCCVV 
EERRTT 
XXCCVV 

Qui si può semplicemente inserire la riga duplicata sotto ogni riga, , la stessa che puoi applicare nel primo passaggio, se stai creando una matrice allora ti aiuterà a moltiplicare ciascuna ..

Spero che questo possa aiutare ..

+0

+1. Grazie. Ho controllato tutti i link disponibili sul tuo post, da cui erano utili solo quelli con algoritmo. Rest ha usato la funzionalità del software nativo come il raddoppiamento delle dimensioni del canvas e l'uso del canvas. Sto accettando la prima risposta originale. –

+0

FYI, Forse la seconda opzione della risposta selezionata non funzionerà bene, in quanto mostrerà l'immagine come un'immagine allungata e un'altra sotto lo stesso .. Spero che questo possa aiutare .. – MarmiK

+0

L'unità è un pixel (o blocco) che non può essere ulteriormente sezionato. Quindi, se raddoppiamo tutte le unità orizzontalmente e quindi duplichiamo questa riga orizzontale, dovrebbe teoricamente funzionare. Mi è sembrato logico! –