2016-01-15 9 views
1

Мне это интересно post about water ripple simulation. Он включает в себя Xcode project с небольшим какао-приложением для OSX. Я попытался запустить приложение в iOS с помощью Swift, но я не смог найти решение следующей проблемы:Что я могу использовать вместо NSBitmapImageRep в iOS? (Пример рябь воды)

Приложение OSX использует NSBitmapImageRep для рисования растровых данных из массива на экран (это происходит в BBRippleView .m). К сожалению, NSBitmapImageRep недоступен в iOS. Вместо этого я попытался использовать CGImage, что «работает»: я вижу какую-то водную рябь, но они разбиты каким-то странным образом, и они не двигаются так, как им предполагалось. Я предполагаю, что CGImage рассчитывает получить битмап-данные в другом формате, чем в настоящее время.

Edit: Вот мой IOS RippleView класс: RippleView.swift

Edit 2: Модифицированная RippleView.swift

Что бы правильно реализовать следующие OSX сегменты кода в прошивкой с помощью Swift?

 image = [[NSImage alloc] initWithSize:NSMakeSize(cols, rows)]; 
     bufrep = [[NSBitmapImageRep alloc] 
          initWithBitmapDataPlanes:NULL 
          pixelsWide:cols 
          pixelsHigh:rows 
          bitsPerSample:8 
          samplesPerPixel:1 
          hasAlpha:NO 
          isPlanar:YES 
          colorSpaceName:NSDeviceWhiteColorSpace 
          bytesPerRow:0 
          bitsPerPixel:0]; 
     [image addRepresentation:bufrep]; 

И

-(void)applyBuffer 
{ 
    unsigned char* data = [bufrep bitmapData]; 
    int x = 0; 
    int y = 0; 
    int position = 0; 
    for (y = 0; y < rows; y ++) { 
     for (x = 0; x < cols ; x ++) { 
      position = (y * cols) + x; 
      data[position] = (char)buffer2[position] << 1; 
     }   
    }  
} 
+0

Покажите нам код, который вы написали, чтобы создать растровое изображение, изменить его и превратить в 'CGImage' на iOS. –

+0

добавил файл RippleView.swift – ediheld

+0

[NSBitmapImageRep для iPhone или прямой доступ к пикселям для CGImage] (http://stackoverflow.com/q/3142178), или вы ищете больше для справки по отладке? Если последние, пожалуйста, отредактируйте свой заголовок, чтобы быть более конкретным для проблемы с вашим кодом. –

ответ

0

Вы говорите CGImageCreate, что изображение в оттенках серого, с 8 битами по пикселю. Но ваши буферы представляют собой массивы Int s, которые представляют собой 32 или 64 бита (4 или 8 байтов).

Переключить на: UInt8, что должно помочь.

+0

Теперь он работает намного лучше, но все еще не так, как он должен быть (как показано на видео). Я добавил новый файл RippleView.swift выше. Что я делаю не так? – ediheld

+0

Как точно не работает как предполагается? Пожалуйста, укажите точное описание (и/или видео) того, что вы ожидаете, и что вы получаете. Быстрый тест показывает, что он работает правильно. – jcaron

+0

Волны кажутся не такими сильными/высокими, как в видео. Я предполагаю, что это потому, что я использую 'UInt8' вместо' Int', который используется в приложении OSX: у меня могут быть только цифры от 0 до 255 вместо более высоких значений и отрицательные значения. Имеет ли это смысл? – ediheld

 Смежные вопросы

  • Нет связанных вопросов^_^