首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将多个NSImages组合成一个大图像?

如何将多个NSImages组合成一个大图像?
EN

Stack Overflow用户
提问于 2010-03-04 00:33:30
回答 2查看 5.8K关注 0票数 16

我有一个对象的集合,描述一个图像名称,它的大小和它的X/Y位置。集合是按“层”排序的,所以我可以将图像组合成一种画家的算法。

由此,我可以确定容纳所有图像所需的矩形,所以现在我要做的是:

  • 创建某种缓冲区来保存结果(相当于iPhoneOS所称的UIGraphicsContext)。
  • 将所有图像绘制到缓冲区中。
  • 从缓冲区的复合结果中获取一个新的NSImage。

在iPhoneOS中,这是我想要的代码:

代码语言:javascript
复制
UIGraphicsBeginImageContext (woSize);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [[UIColor clearColor] set];
    CGContextFillRect(ctx, NSMakeRect(0, 0, woSize.width, woSize.height));
    // draw my various images, here.
    // i.e. Various repetitions of [myImage drawAtPoint:somePoint];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

我要找的是如何在桌面可可/NS中做到这一点。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-04 00:40:45

代码语言:javascript
复制
NSImage* resultImage = [[[NSImage alloc] initWithSize:imageSize] autorelease];
[resultImage lockFocus];

[anotherImage drawAtPoint:aPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
// Or any of the other about 6 options; see Apple's guide to pick.

[resultImage unlockFocus];

查看苹果绘图指南以获得更长、更详细的答案。

票数 20
EN

Stack Overflow用户

发布于 2015-09-15 09:49:11

代码语言:javascript
复制
#import <Cocoa/Cocoa.h>

@interface CompositeView : NSView {
    NSImage *bottom;
    NSImage *top;
}
- (IBAction)takeBottomFrom: (id)aView;
- (IBAction)takeTopFrom: (id)aView;
@end

#import "CompositeView.h"

@implementation CompositeView
- (IBAction)takeBottomFrom: (id)aView
{
    id img = [[aView image] retain];
    [bottom release];
    bottom = img;
    [self setNeedsDisplay: YES];
}

- (IBAction)takeTopFrom: (id)aView
{
    id img = [[aView image] retain];
    [top release];
    top = img;
    [self setNeedsDisplay: YES];
}

- (void)drawRect:(NSRect)rect
{
    NSCompositingOperation op = 0;
    NSRect bounds = [self bounds];
    NSSize imageSize = bounds.size;
    imageSize.width /= 7;
    imageSize.height /= 2;

    NSRect bottomRect = { {0,0}, [bottom size] };
    NSRect topRect = { {0,0}, [top size] };

    for (unsigned y=0 ; y<2 ; y++)
    {
        for (unsigned x=0 ; x<7 ; x++)
        {
            NSRect drawRect;

            drawRect.origin.y = y * imageSize.height;
            drawRect.origin.x = x * imageSize.width;
            drawRect.size = imageSize;

            [bottom drawInRect: drawRect
                      fromRect: bottomRect
                     operation: NSCompositeCopy
                      fraction: 1];

            [top drawInRect: drawRect
                   fromRect: topRect
                  operation: op++
                   fraction: 1];
        }
    }
}

- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
    }
    return self;
}

@end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2376097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档