Можно, вероятно, хотеть попытаться использовать его для себя, чтобы быть лучше способными видеть это, не может быть ясно из документов, как Spring поощряет интерфейсное использование.
Вот несколько примеров:
Говорят, что Вы пишете класс, который должен читать из ресурса (например, файл), на который можно сослаться несколькими способами (например, путем к классу, абсолютным путем к файлу, как URL и т.д.). Вы хотели бы определить org.springframework.core.io.Resource
(интерфейсное) свойство на Вашем классе. Тогда в Вашем конфигурационном файле Spring, Вы просто выбираете класс фактической реализации (например, org.springframework.core.io.ClassPathResource
, org.springframework.core.io.FileSystemResource
, org.springframework.core.io.UrlResource
и т.д.). Spring в основном функционирует как чрезвычайно универсальную фабрику.
, Если Вы хотите использовать в своих интересах интеграцию AOP Spring (для добавления перехватчиков транзакции, например), необходимо будет в значительной степени определить интерфейсы. Вы определяете точки перехвата в своем конфигурационном файле Spring, и Spring генерирует прокси для Вас, на основе Вашего интерфейса.
Это примеры, с которыми у меня лично есть опыт. Я уверен, что существует намного больше там.
Следующая попытка :) Думаю у тебя уф буфер не чередуется. Похоже, что сначала идут значения U, а затем массив значений V. Изменение строк на
unsigned int voffset = YUV_HEIGHT * YUV_WIDTH / 2;
float U = lookupTableU [uvBuffer [ y * (YUV_WIDTH / 2) + x/2] ];
float V = lookupTableV [uvBuffer [ voffset + y * (YUV_WIDTH / 2) + x/2] ];
может указать, так ли это на самом деле.
Изображение выглядит так, как будто у вас формат 4: 1: 1. Вам следует изменить свои строки на
float U = lookupTableU [uvBuffer [ (y * (YUV_WIDTH / 4) + (x/4)) * 2 ] ]
float V = lookupTableU [uvBuffer [ (y * (YUV_WIDTH / 4) + (x/4)) * 2 + 1] ]
Может быть, вы можете опубликовать результат, чтобы увидеть, что еще не так. Мне всегда трудно об этом думать. Намного проще подойти к этому итеративно.
Я думаю, вы неправильно указываете значения U и V. Вместо:
float U = lookupTableU [uvBuffer [ ((y / 2) * (x / 2) + (x/2)) * 2 ] ];
float V = lookupTableV [uvBuffer [ ((y / 2) * (x / 2) + (x/2)) * 2 + 1] ];
Это должно быть что-то вроде
float U = lookupTableU [uvBuffer [ ((y / 2) * (YUV_WIDTH / 2) + (x/2)) * 2 ] ];
float V = lookupTableV [uvBuffer [ ((y / 2) * (YUV_WIDTH / 2) + (x/2)) * 2 + 1] ];