2

我发现这篇关于水波纹模拟的有趣帖子。它包括一个Xcode 项目和一个用于 OSX 的小可可应用程序。我尝试使用 Swift 让应用程序在 iOS 中运行,但我找不到以下问题的解决方案:

OSX 应用程序用于NSBitmapImageRep将位图数据从数组绘制到屏幕上(这发生在 BBRippleView.m 中)。不幸的是,NSBitmapImageRep在 iOS 中不可用。我尝试使用 aCGImage代替,这是“一种工作”:我可以看到某种水波纹,但它们以某种奇怪的方式分开,并且它们没有按照应有的方式移动。我猜 CGImage 期望以与当前获取的格式不同的格式获取位图数据。

编辑:这是我的 iOS RippleView 类:RippleView.swift

编辑 2:修改后的 RippleView.swift

使用 Swift 在 iOS 中实现以下 OSX 代码段的正确方法是什么?

        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;
        }           
    }       
}
4

1 回答 1

0

你说CGImageCreate你的图像是灰度的,8 位像素。但是您的缓冲区是Ints 的数组,它们是 32 位或 64 位(4 或 8 个字节)。

切换到UInt8,这应该会有很大帮助。

于 2016-01-16T12:40:35.173 回答