2009-10-26 62 views
3

幾年前,我在Visual Basic中製作了一個滾動塊2D視頻遊戲。我正在將它翻譯成Mac的可可。有沒有一個框架可以讓我使用BitBlt?或者在沒有使用OpenGL的情況下是否有與BitBlt相當的功能?謝謝!Objective-C/Cocoa中的BitBlt()相當於

回答

2

你或許應該開始Core Graphics

+3

在此範圍內,最接近於一個點位blitter等價的是在myDrawFlag示例代碼中使用的CGContextDrawLayerAtPoint函數。請參閱: http://developer.apple.com/mac/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_layers/dq_layers.html#//apple_ref/doc/uid/TP30001066-CH219-TPXREF101 – 2009-10-26 12:50:07

+0

謝謝!我敢肯定,這不允許你從一個圖像複製...在另一個圖像(它是矢量蒙版)中黑色(而不是白色)。它似乎是非常有用的複製瓷磚或rects和片段你創建的圖像,但不復制在Objective-C/Cocoa中預先加載爲NSImage的現有文件...並且肯定不會複製那些基於其矢量蒙版的圖像。儘管如此,如果我錯了,請糾正我。 – Brian 2009-10-26 16:56:47

+0

您可以直接將圖像繪製到CGLayer中。當你這樣做時,你也可以掩飾。不過,你不必使用CGLayer(它只是最快的,因爲它緩存在顯卡上)。如果你想要實際的混合模式,你需要使用CGContextSetBlendMode和CGContextDrawImage。 – 2009-10-26 23:09:14

2

馬特提到的,你可能想CGContextDrawImageCGContextSetBlendMode

首先,您需要從圖像數據中創建一個CGImageRef。你可以通過數據提供者來做到這一點如果您已將圖像加載到內存中,則應使用CGDataProviderCreateDirect。該數據提供者將是CGImageCreate的參數。

接下來,在您的Cocoa視圖的drawRect:方法,你要得到當前背景下是這樣的: CGContextRef cgContext = [[NSGraphicsContext currentContext] graphicsPort];

然後使用CGContextDrawImage繪製圖像。

正如馬特所說,你可以控制與CGContextSetBlendMode混合。