This is ImageTestController.m in view mode; [Download] [Up]
/*
** Copyright (c) 1995 Netsurfer Inc. All Rights Reserved.
**
** Author: <bbum@friday.com>
*/
/* This object is included in the MiscKit by permission from the author
** and its use is governed by the MiscKit license, found in the file
** "LICENSE.rtf" in the MiscKit distribution. Please refer to that file
** for a list of all applicable permissions and restrictions.
*/
#import <appkit/appkit.h>
#import "ImageTestController.h"
#import "ImageView.h"
#import "LapTimer.h"
#import <SurfImage/surfimage.h>
@implementation ImageTestController
void foo(int err) {
fprintf(stderr, "malloc error %d (see useless malloc man page)\n", err);
#ifdef DEBUG
abort(); // abort() to gdb.
#endif
}
- appDidInit:sender
{
malloc_error(foo);
timer = [[LapTimer allocFromZone:[self zone]] init];
surfDecoder = [SurfImageDecoder sharedInstance];
#ifdef DEBUG
[surfVerbose setState:1];
#endif
[self surfVerbose:sender];
[self surfOptimize:sender];
#ifdef DEBUG
[surfDecoder dumpTypes];
#endif
[self perform:@selector(openImage:) with:nil
afterDelay:0.0 cancelPrevious:NO];
return self;
}
- surfOptimize:sender
{
[surfDecoder setImageDepth:
[surfOptimize state] ?
NX_TwelveBitRGBDepth : NX_TwentyFourBitRGBDepth];
return self;
}
- surfVerbose:sender
{
[surfDecoder setVerboseMode: [surfVerbose state] ? YES : NO];
return self;
}
- surfOpenImage: (const char *) pathName
{
double decodeSeconds, totalSeconds;
char outBuf[300];
[timer start];
// decode image
theImage = [surfDecoder decodeFromFile:pathName];
[timer lap];
// image image
[surfView setImage:theImage];
[window flushWindow];
[timer stop];
// check for corruption
[surfCorrupt setState: [surfDecoder lastImageCorrupt]];
// calculate elapsed times
decodeSeconds = [timer lapSeconds];
totalSeconds = [timer totalSeconds];
// display times
sprintf(outBuf,
"Decode Time:\t%2.5f seconds\n",
decodeSeconds);
[[surfFields cellAt:FLD_DECODE :0] setStringValue:outBuf];
sprintf(outBuf,
"Image Time:\t%2.5f seconds\n",
totalSeconds - decodeSeconds);
[[surfFields cellAt:FLD_IMAGE :0] setStringValue:outBuf];
sprintf(outBuf,
"Total:\t\t%2.5f seconds\n",
totalSeconds);
[[surfFields cellAt:FLD_TOTAL :0] setStringValue:outBuf];
return self;
}
- filterOpenImage: (const char *) pathName
{
double decodeSeconds, totalSeconds;
NXSize theSize;
char outBuf[300];
[timer start];
// decode image [the getSize: forces filter service to decode]
theImage = [[NXImage allocFromZone:[self zone]] initFromFile:pathName];
[theImage getSize:&theSize];
[timer lap];
// image image
[filterView setImage:theImage];
[window flushWindow];
[timer stop];
// calc & display elapsed time
decodeSeconds = [timer lapSeconds];
totalSeconds = [timer totalSeconds];
if(theImage)
sprintf(outBuf,
"Decode Time:\t%2.5f seconds",
decodeSeconds);
else
sprintf(outBuf,
" <<<<< TIMED OUT >>>>> ");
[[filterFields cellAt:FLD_DECODE :0] setStringValue:outBuf];
if(theImage)
sprintf(outBuf,
"Image Time:\t%2.5f seconds",
totalSeconds - decodeSeconds);
else
sprintf(outBuf,
" <<<<< TIMED OUT >>>>> ");
[[filterFields cellAt:FLD_IMAGE :0] setStringValue:outBuf];
if(theImage)
sprintf(outBuf,
"Total:\t\t%2.5f seconds",
totalSeconds);
else
sprintf(outBuf,
" <<<<< TIMED OUT >>>>> ");
[[filterFields cellAt:FLD_TOTAL :0] setStringValue:outBuf];
return self;
}
- openImageFile:(const char *) pathName
{
[self surfOpenImage: pathName];
if([filterEnabled state])
[self filterOpenImage: pathName];
return self;
}
- openImage:sender
{
static id openPanel;
const char * const *types;
types = [surfDecoder imageUnfilteredFileTypes];
if(!openPanel) {
openPanel = [OpenPanel new];
[openPanel setDirectory: "~/test_images/"];
}
if([openPanel runModalForTypes:types]) {
const char *fileName = [openPanel filename];
[self openImageFile:fileName];
}
return self;
}
- saveSurfTIFF:sender
{
id savePanel = [SavePanel new];
[savePanel setRequiredFileType:"tiff"];
if([savePanel runModal]) {
const char *fileName = [savePanel filename];
[surfView saveImageAsTIFF: fileName];
}
return self;
}
- saveFilterTIFF:sender
{
id savePanel = [SavePanel new];
[savePanel setRequiredFileType:"tiff"];
if([savePanel runModal]) {
const char *fileName = [savePanel filename];
[filterView saveImageAsTIFF: fileName];
}
return self;
}
- infoPanel:sender
{
if(!infoPanel)
infoPanel = [[objc_getClass("FSCInfoPanel") alloc] init];
[infoPanel orderFront:sender];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.