在 iOS 中我可以使用什么代替 NSBitmapImageRep? (水波纹示例)
What can I use instead of NSBitmapImageRep in iOS? (Water ripples example)
我发现这个有趣的 post about water ripple simulation. It includes a Xcode project 有一个小 cocoa 应用程序 OSX。我尝试使用 Swift 在 iOS 中获取应用程序 运行,但我找不到以下问题的解决方案:
OSX 应用程序使用 NSBitmapImageRep
将位图数据从数组绘制到屏幕上(这发生在 BBRippleView.m 中)。不幸的是,NSBitmapImageRep
在 iOS 中不可用。我尝试改用 CGImage
,即 "kind of working":我可以看到某种水波纹,但它们以某种奇怪的方式分开,并且没有按照预期的方式移动。我猜 CGImage 期望以不同于当前格式的格式获取位图数据。
编辑:这是我的 iOS RippleView class: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;
}
}
}
您告诉 CGImageCreate
您的图像是灰度图像,像素为 8 位。但是您的缓冲区是 Int
的数组,它们是 32 位或 64 位(4 或 8 字节)。
切换到 UInt8
,应该会有很大帮助。
我发现这个有趣的 post about water ripple simulation. It includes a Xcode project 有一个小 cocoa 应用程序 OSX。我尝试使用 Swift 在 iOS 中获取应用程序 运行,但我找不到以下问题的解决方案:
OSX 应用程序使用 NSBitmapImageRep
将位图数据从数组绘制到屏幕上(这发生在 BBRippleView.m 中)。不幸的是,NSBitmapImageRep
在 iOS 中不可用。我尝试改用 CGImage
,即 "kind of working":我可以看到某种水波纹,但它们以某种奇怪的方式分开,并且没有按照预期的方式移动。我猜 CGImage 期望以不同于当前格式的格式获取位图数据。
编辑:这是我的 iOS RippleView class: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;
}
}
}
您告诉 CGImageCreate
您的图像是灰度图像,像素为 8 位。但是您的缓冲区是 Int
的数组,它们是 32 位或 64 位(4 或 8 字节)。
切换到 UInt8
,应该会有很大帮助。