2012-01-07 123 views
1

我想從NSImage對象中獲取最高的NSBitmapImageRep。
例如,如果對象NSImage中包含:什麼是從NSImage對象獲得最高位圖表示的最佳方式

NSIconRefBitmapImageRep 0x1272d0 Size={128, 128} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=128x128 Alpha=YES Planar=NO Format=0 CurrentBacking=nil (faulting), 
NSIconRefBitmapImageRep 0x11b330 Size={256, 256} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=256x256 Alpha=YES Planar=NO Format=0 CurrentBacking=nil (faulting), 
NSIconRefBitmapImageRep 0x19fe10 Size={512, 512} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=512x512 Alpha=YES Planar=NO Format=0 CurrentBacking=nil (faulting), 
NSIconRefBitmapImageRep 0x124d10 Size={32, 32} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=32x32 Alpha=YES Planar=NO Format=0 CurrentBacking=nil (faulting), 
NSIconRefBitmapImageRep 0x142180 Size={16, 16} ColorSpace=Generic RGB colorspace BPS=8 BPP=32 Pixels=16x16 Alpha=YES Planar=NO Format=0 CurrentBacking=nil (faulting) 

然後我想{512,512}表示。我正在使用下面的代碼。

NSBitmapImageRep* requiredBitmap = nil; 
    BOOL setValue =NO; 

    NSEnumerator* imageEnum = [[origImage representations] objectEnumerator]; 

    while(imagerep = [imageEnum nextObject]) 
    { 
     if ([imagerep isKindOfClass:[NSBitmapImageRep class]]) 
     { 
      if (!setValue) { 
       requiredBitmap = imagerep; 
       setValue =YES; 
      } 
      if ([requiredBitmap pixelsHigh]<[imagerep pixelsHigh]) { 
       requiredBitmap = imagerep; 

       NSLog(@"%d", [imagerep pixelsHigh]); 

      } 
     } 
    } 


    NSImage* original512Image; 

    if(requiredBitmap) 
    { 
     original512Image = [[NSImage alloc] initWithData:[requiredBitmap TIFFRepresentation]]; 


} 

是否有任何有效的方法來做到這一點?

+1

你試過'bestRepresentationForRect:背景:提示:'具有非常大的矩形(或許是'CGRectInfinite')? – 2012-01-07 07:31:07

+0

此方法在Mac OS X v10.6及更高版本中可用。我正在尋找Leopard os的解決方案。 – 2012-01-07 10:01:07

回答

0

我使用

id imageRep = nil; 

NSSize largImageSize; 

BOOL setValue =NO; 

NSEnumerator* imageEnum = [[lOriginalImage representations] objectEnumerator]; 

while((imageRep = [imageEnum nextObject])) { 

    if (!setValue) { 
     largImageSize = [imageRep size]; 
     setValue =YES; 
    } 
    else if ((largImageSize.height) < ([imageRep size].height)) { 
     largImageSize = [imageRep size]; 
    } 

} 


[lOriginalImage setSize:largImageSize]; 
0

您應該使用快速枚舉,但除此之外,您的方法與Leopard的效率相差無幾。即使如此,循環五個圖像代碼並檢查它們的尺寸的開銷將非常小,只是一些訪問方法調用而已。

請記住,第一個配置文件,然後優化。先佔優化是浪費時間。

NSBitmapImageRep* requiredBitmap = nil; 
BOOL setValue =NO; 

for(NSImageRep* imagerep in [origImage representations]) 
{ 
    if ([imagerep isKindOfClass:[NSBitmapImageRep class]]) 
    { 
     if (!setValue) { 
      requiredBitmap = imagerep; 
      setValue =YES; 
     } 
     if ([requiredBitmap pixelsHigh]<[imagerep pixelsHigh]) { 
      requiredBitmap = imagerep; 

      NSLog(@"%d", [imagerep pixelsHigh]); 

     } 
    } 
} 


NSImage* original512Image = nil; 
if(requiredBitmap) 
{ 
    original512Image = [[NSImage alloc] initWithData:[requiredBitmap TIFFRepresentation]]; 
} 
相關問題