gpt4 book ai didi

objective-c - 从 NSImage 对象获取最高位图表示的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-03 17:25:01 25 4
gpt4 key购买 nike

我想从 NSImage 对象中获取最高的 NSBitmapImageRep。
例如,如果 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]];


}

有什么有效的方法可以做到这一点吗?

最佳答案

您应该使用快速枚举,但除此之外,您的方法与 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]];
}

关于objective-c - 从 NSImage 对象获取最高位图表示的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8768093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com