我正在尝试将as3delaunay library移植到Obj-C(为了娱乐和了解更多Obj-C)。一切都很好,但是我不太了解如何将BitmapData
的用法转换为可可。以下是上述库的几个相关部分:
在Edge.as
中:
internal function makeDelaunayLineBmp():BitmapData
{
var p0:Point = leftSite.coord;
var p1:Point = rightSite.coord;
GRAPHICS.clear();
// clear() resets line style back to undefined!
GRAPHICS.lineStyle(0, 0, 1.0, false, LineScaleMode.NONE, CapsStyle.NONE);
GRAPHICS.moveTo(p0.x, p0.y);
GRAPHICS.lineTo(p1.x, p1.y);
var w:int = int(Math.ceil(Math.max(p0.x, p1.x)));
if (w < 1)
{
w = 1;
}
var h:int = int(Math.ceil(Math.max(p0.y, p1.y)));
if (h < 1)
{
h = 1;
}
var bmp:BitmapData = new BitmapData(w, h, true, 0);
bmp.draw(LINESPRITE);
return bmp;
}
在
selectNonIntersectingEdges.as
中的以下函数中调用该函数:internal function selectNonIntersectingEdges(keepOutMask:BitmapData, edgesToTest:Vector.<Edge>):Vector.<Edge>
{
if (keepOutMask == null)
{
return edgesToTest;
}
var zeroPoint:Point = new Point();
return edgesToTest.filter(myTest);
function myTest(edge:Edge, index:int, vector:Vector.<Edge>):Boolean
{
var delaunayLineBmp:BitmapData = edge.makeDelaunayLineBmp();
var notIntersecting:Boolean = !(keepOutMask.hitTest(zeroPoint, 1, delaunayLineBmp, zeroPoint, 1));
delaunayLineBmp.dispose();
return notIntersecting;
}
}
它也显示为
SiteList.as
中的参数: public function nearestSitePoint(proximityMap:BitmapData, x:Number, y:Number):Point
{
var index:uint = proximityMap.getPixel(x, y);
if (index > _sites.length - 1)
{
return null;
}
return _sites[index].coord;
}
在Obj-C / Cocoa中代表这种行为和/或使用BitmapData的好方法是什么?
最佳答案
核心图形库具有非常强大的图形功能-即使它们全部基于C。您可以创建一个8位RGBA(红色,绿色,蓝色,alpha)位图上下文,如下所示:
size_t const bytesPerRow = 4 * width;
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedLast;
CGContextRef ctx = CGBitmapContextCreate(NULL, width, height, 8, bytesPerRow, colorspace, bitmapInfo);
CFRelease(colorspace);
这对应于AS3 BitmapData的内容。
ctx
现在具有对位图上下文的引用,您最终必须使用CGContextRelease(ctx)
释放该位图上下文。您可以操纵上下文,即使用各种
CGContext*
函数将其绘制。如果最终需要将其另存为图像(例如JPEG数据),请使用CGBitmapContextCreateImage()
。关于objective-c - Obj-C/Cocoa的 ActionScript :如何表示BitmapData?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9789493/