Sem haver barras pretas, quero dizer. 1080 não é múltiplo de 768, existe algum tipo de perda de dados?
Sem haver barras pretas, quero dizer. 1080 não é múltiplo de 768, existe algum tipo de perda de dados?
Respostas:
Em essência, uma imagem é um grupo de amostras de pontos (leia Um pixel não é um quadrado pequeno 3 ). Quando você transforma ou dimensiona a imagem, é necessário redimensioná-la. Então, o que você faz, teoricamente, é pegar as amostras pontuais e convertê-las em uma função contínua. Então você prova essa função contínua e reconstrói um sinal. Portanto, existem duas ou três fases diferentes aqui.
Observe que nenhuma dessas etapas possui um formulário fixo. Na prática, quando otimizado, é impossível dizer que existem etapas. A transformação realmente não precisa ser simples, pode ser o mapeamento da forma em espiral, etc.
Imagem 1 : Um sinal 1-D reconstruído por diferentes filtros.
Na prática, sabe-se bastante sobre a reconstrução de sinais no campo de processamento de sinais. Projetar esses filtros e escolher o correto é uma forma de arte por si só. Mas, em essência, a escolha do filtro é uma troca entre desfoque e toque . É claro que o algoritmo também possui outras qualidades, como quantas instruções são necessárias para implementar, qual a rapidez e a quantidade de memória necessária, etc. O que pode ser muito importante em aplicativos incorporados ou em tempo real.
Imagem 2 : Visão geral de todo o processo.
Existem numerosos algoritmos de aumento e redução de escala disponíveis para dimensionar imagens de qualquer resolução para qualquer outra resolução arbitrária. Cada algoritmo geralmente envolve uma troca entre eficiência, suavidade e nitidez, com graus variados de cada troca para algoritmos diferentes.
Confira este artigo da Wikipedia para esses algoritmos e exemplos de tais algoritmos.
O algoritmo mais conhecido (e usado) popularmente é o algoritmo de interpolação bicúbica . Ele interpola entre pontos 2D em uma grade retangular. Usando splines cúbicos (ou interpolação cúbica), primeiro interpola em uma dimensão (localiza a linha / coluna interpolada) e, em seguida, interpola a linha / coluna interpolada na outra dimensão.
A interpolação bilinear é semelhante à interpolação bicúbica, exceto que o primeiro interpola usando uma função linear e pode interpolar apenas entre dois valores e o último usa uma função cúbica e pode interpolar entre quatro valores.
A função simples para interpolação bicúbica é a seguinte:
f(f(p00, p01, p02, p03, y),
f(p10, p11, p12, p13, y),
f(p20, p21, p22, p23, y),
f(p30, p31, p32, p33, y),
x)
onde (x, y) é a posição interpolada ep [] [] é a matriz 2d que representa a grade 4 * 4.
Verifique este link para obter mais informações e exemplos de código, o que realmente ajuda muito!
Enquanto as outras respostas dadas estiverem corretas, não tenho certeza de que respondam totalmente à sua pergunta. Para não obter barras pretas, você tem duas opções se o destino não tiver a mesma forma (ou proporção) da origem:
Há outra opção, mas ela não se encaixa nos seus critérios - dimensione uniformemente, mas apenas até que uma dimensão seja tão grande quanto o destino. Nesse caso, você dimensionaria horizontal e verticalmente em 1,40625 para obter um resultado de 1440x1080. Isso geralmente é chamado de "dimensionar para caber".
Para qualquer uma dessas opções, você pode usar o algoritmo de dimensionamento que atenda às suas necessidades.