как можно из картинки панорамы сделать обычную картинку? То есть программой убрать искривление. Я думал над этим и по идее может сработать, если по картинке двигать каждый пиксель по определённой формуле. Может кто знает как двигать эти пиксели в картинке? В гугле уже 3 день ничего подобного именно на языке свтфт не могу найти. Там есть изменение цвета в пикселе, но не его движение относительно своей системы координат
                  
                  
                
Если можно менять цвет пикселя, то можно сделать так чтобы цвет менялся на цвет следующего, и по сути оно сдвигаться будет
Сделать цикл для каждого пикселя
 Andrei
                          Nik
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nik
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Кстати неплохая идея, можно попробовать, так как размер итоговой картинки не должен меняться
Тебе прямая дорога в мир Metal, там можно творить чудеса. Гугли, точно не подскажу, не работал с ним так глубоко
 Andrei
                          Nik
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nik
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Знаю про метал, но не знаю можно ли с помощью этой технологией сделать что-то подобное
Сказу точнее RenderKit
 Andrei
                          Nik
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Andrei
                          Nik
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Почитаю, спасибо
Вопрос интересный. Начать нужно с определения проекции используемой при построении панорамы. В большинстве случаев это равнопромежуточная проекция(aka сферическая или equirectangular). Соответственно тебе нужно замапить это дело в обычную гномоническую проекцию(gnomonic или rectilinear) Теперь уже можно составить нормальный запрос в гугле по типу: convert(map) equirectangular projection to rectilinear projection В целом этот процесс состоит из нескольких этапов(большая часть из которых есть в книге , глава 9.1.6) - - определить используя координаты пикселей панорамы соответствующие сферические координаты; - из сферических координатов вида (sinθ, h, cosθ) определить θ и h; - получить 2D координаты (x, y) на сфере использую полученные θ и h - - сделать билинейную интерполяцию между начальными пикселями и новыми. Реализацию этих шагов можно найти на гитахабе по тем же ключевым словам: equirectangular to rectilinear Но свифта там конечно же не будет - это сильно нишевая задача. --- Касаемо реализации на свифте. Тут у тебя два выбора, это Accelerate: vImage + vDSP , либо Metal. Но Metal можно сразу отбросить, ибо это голое апи, которое нужно во-первых знать(а на это уйдёт много времени), во-вторых придётся написать поверх часть нужных вещей, которые уже есть в Accelerate. В Accelerate перегонишь CGImage в vImage.PixelBuffer, важно это сделать без копирования. Примеры в доке есть. vImage.PixelBuffer предоставляет готовые операции по работе с битмапом, их много, но этого тебе будет недостаточно для всех шагов указанных выше. Придётся поработать ещё с функциями vDSP из того же Accelerate. Они позволят выполнить ещё ряд математических операций над векторами. Не забывай при работе с vDSP, что память в vImage.PixelBuffer выровнена по кэш-линиям процессора и нужно учитывать соотвествующий alignment в строке(в доке тоже это есть). --- Функции Accelerate работают только с указателями и сами распараллелят работу по ядрам. Это нАмного быстрее чем делать такую работу в обычном for loop(даже если учесть что компилятор сможет векторизовать часть циклов) конечно не варинат, сюда можешь даже не смотреть.
Привет! Как жизнь? Куда пропадал?
Привет. Творческий отпуск : )
Обсуждают сегодня