;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Novo celular da Oppo tem câmera que funciona como um microscópio

Smartphone Oppo Find X3 - Divulgação
Smartphone Oppo Find X3 Imagem: Divulgação

Thiago Varella

Colaboração para Tilt

12/03/2021 12h14

Nos últimos anos, um dos destaques das câmeras dos principais smartphones lançados foi o zoom, como no P30 Pro da Huawei ou no Galaxy S20 da Samsung. Mas a fabricante chinesa Oppo pode estar lançando uma nova tendência. A empresa anunciou, na quinta-feira (11) o Find X3 Pro, seu aparelho topo de linha, que vem com uma câmera que vira microscópio.

O grande chamariz do novo smartphone da Oppo é a fotografia, mas a novidade é uma microlente de 3 megapixels que, segundo a fabricante, tem um zoom de 60x e é capaz de capturar imagens microscópicas. Essa câmera também vem com um anel de LED para iluminar o objeto fotografado e promete registrar imagens com distâncias focais entre 1 e 3 mm.

Segundo teste do site "Engadget", as fotos com a câmera microscópica têm baixa resolução, mas bom foco, caso as mãos do fotógrafo fiquem firmes. Nas palavras da Oppo, este sensor é interessante para "dar uma olhada de perto no que não pode ser visto a olho nu".

Oppo Find X3 - Divulgação - Divulgação
Imagem: Divulgação

Todo o sistema de câmeras do Find X3 Pro parece ser bastante robusto. Além do microscópio, o smartphone também vem com uma câmera principal e uma ultrawide que usam sensores Sony IMX766 de 50 megapixels. Na teoria, isso mostra que a qualidade da imagem nas duas lentes deve ser comparável.

Como já é tendência, o conjunto de câmeras também vem com lente de zoom, mas, surpreendentemente simples, com sensor de 13 megapixels e zoom ótico de apenas 2x sobre a câmera principal. No modelo anterior da Oppo, o zoom era de 5x.

Outro aspecto interessante do Find X3 Pro é sua tela AMOLED com resolução de 3216 pixels x 1440 pixels, brilho de 1.300 nits (medida de luminescência; quanto maior, melhor) e taxa de atualização de até 120 Hz (na prática, isso faz com que a navegação seja mais fluída; maioria dos telefones usa taxa de atualização de 60 Hz).

A Oppo afirma que as fotos e vídeos capturados pela câmera do smartphones podem ser mostrados com mais de um bilhão de cores, contra os tradicionais 16,7 milhões das telas da maioria dos smartphones.

Em relação ao hardware, o Find X3 Pro vem com processador Snapdragon 888 (o mais potente da atualidade), 12 GB de RAM e 256 GB de armazenamento. A bateria de 4.500 mAH tem carregamento rápido a 65W e também pode ser carregada via wireless.

Ainda não há data de lançamento do Find X3 Pro, mas não há expectativa que o aparelho da Oppo seja vendido no Brasil. A marca chinesa costuma ser muito popular em países asiáticos.