在我正在进行的项目中,我有3个图像:顶部,中部和底部。顶部和底部是固定的高度,中间应该在两者之间重复。 (窗口大小将会改变。)它们都使用用户首选项中的颜色着色,然后需要使用首选项中的值设置其alpha值。
我几乎可以做任何事情。我被困住的部分正在画中间。我决定使用[NSColor +colorWithPaternImage:]
是最容易使用的东西。有很多代码可以生成实际的图像和颜色,所以假设它们存在并且不是零。
int problem; // just to help explain things
float alpha;
NSImage *middleTinted;
NSRect drawRect = [self bounds];
drawRect.size.height = self.bounds.size.height - topTinted.size.height - bottomTinted.size.height;
drawRect.origin.y = topTinted.size.height;
NSColor* colorOne = [NSColor colorWithPatternImage:middleTinted];
NSColor* colorTwo = [colorOne colorWithAlphaComponent:alpha];
if(problem == 1)
{
[colorOne set];
}
else if(problem == 2)
{
[colorTwo set];
}
[NSBezierPath fillRect:drawRect];
假设problem == 1
,它会在正确的位置绘制正确的图像并且尺寸正确,但没有alpha。 (显然,因为我没有指定一个。)
当problem == 2
时,我希望它能做同样的事情,但具有正确的alpha值。而不是这个,我得到一个黑盒子。
是否有解决方案会使用正确的alpha重复图像?我想我可以在循环中手动绘制图像,但如果存在,我更喜欢更合理的解决方案。
答案 0 :(得分:1)
我预计问题是图案颜色不支持-colorWithAlphaComponent:
。
NSCell.h
包含一个名为NSDrawThreePartImage
的方法,可以完成绘制端盖和平铺图像的工作。它还有一个alphaFraction参数,可以满足您的需求。
如果这对您不起作用,那么您可以通过使用所需的alpha值将middleTinted
图像重新渲染为新的NSImage来获得图案颜色方法。 (参见NSImage的绘图......方法。)