_window = 1 begin enum output 1 _noiseView _fpsLabel end enum void local fn BuildWindow CGRect r = fn CGRectMake( 0, 0, 340, 300 ) window _window, @"Rosetta Code Image Noise", r, NSWindowStyleMaskTitled + NSWindowStyleMaskClosable r = fn CGRectMake( 10, 50, 320, 240 ) imageview _noiseView, YES, , r, NSImageScaleAxesIndependently, NSImageAlignCenter, NSImageFrameNone, _window r = fn CGRectMake( 20, 10, 280, 24 ) textlabel _fpsLabel, @"Estimated FPS: 60", r, _window ControlSetAlignment( _fpsLabel, NSTextAlignmentCenter ) end fn local fn CIImageToImageRef( ciImage as CIImageRef ) as ImageRef CIImageRepRef rep = fn CIImageRepWithCIImage( ciImage ) CGSize size = fn ImageRepSize( rep ) ImageRef image = fn ImageWithSize( size ) ImageAddRepresentation( image, rep ) end fn = image local fn NoiseCIImage as CIImageRef CIFilterRef filter = fn CIFilterWithName( @"CIPhotoEffectNoir" ) ObjectSetValueForKey( filter, fn ObjectValueForKey( fn CIFilterWithName(@"CIRandomGenerator"), @"outputImage" ), @"inputImage" ) CIFilterSetDefaults( filter ) CIImageRef outputCIImage = fn CIImageByCroppingToRect( fn CIFilterOutputImage( filter ), fn CGRectMake( rnd(1000), rnd(1000), 500, 500 ) ) end fn = outputCIImage local fn BuildNoiseView block NSInteger renderedFrames renderedFrames = 0 timerbegin, 1.0/60, YES CIImageRef noiseCIImage = fn NoiseCIImage ImageRef noiseImage = fn CIImageToImageRef( noiseCIImage ) ImageViewSetImage( _noiseView, noiseImage ) renderedFrames++ if( renderedFrames == 60 ) ControlSetStringValue( _fpsLabel, fn StringWithFormat( @"Estimated FPS: %ld", renderedFrames ) ) renderedFrames = 0 end if timerend end fn void local fn DoDialog( ev as long, tag as long, wnd as long ) select ( ev ) case _windowWillClose : end end select end fn randomize on dialog fn DoDialog fn BuildWindow fn BuildNoiseView HandleEvents