簡體   English   中英

iPhone:使用Quartz 2D轉換圖像

[英]iPhone: Transforming an image using Quartz 2D

我正在嘗試使用CGContextRef對圖像進行一些轉換。 我正在使用CGContextTranslateCTM,CGContextScaleCTM和CGContextRotateCTM函數,但為了使事情簡單,我們只關注第一個。 我想知道為什么下面的代碼產生的是原始圖像? 我想念什么嗎?

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGContextRef g = CGBitmapContextCreate((void*) pixelData, 
                                                       width, 
                                                       height, 
                                                       RGBA_8_BIT, 
                                                       bytesPerRow, 
                                                       colorSpace, 

                                                   kCGImageAlphaPremultipliedLast);

CGContextSetShouldAntialias(g, YES);

CGContextSetInterpolationQuality(g, kCGInterpolationHigh);

CGContextTranslateCTM( g,translateX, translateY );


CGImageRef tempImg  = CGBitmapContextCreateImage (g);
CGContextDrawImage( g, CGRectMake (0, 0, width, height), tempImg );
CGContextRelease(g);
CGColorSpaceRelease( colorSpace );

同樣,在翻譯后,如何在此圖像上繪制另一幅圖像,但具有部分透明度(例如,alpha = 0.5)。

我搜索了很多,但沒有找到答案,感謝您的幫助... :)

請注意,我是從pixelData創建上下文的,而tempImg是在轉換后創建的。 初始化沒有問題,因為當前正在生成原始圖像,但是問題在於我想的翻譯。

轉換為圖形狀態只會影響后續的繪圖操作-不會更改現有的圖像數據。 如果要將變換應​​用於圖像,請嘗試如下操作:

  1. 創建一個空的CGContext(在iPhone上,使用UIGraphicsBeginImageContext)
  2. 平移,縮放或旋轉其圖形狀態
  3. 將現有圖像繪制到其中。
  4. 從新的CGContext獲取圖像(在iPhone上,使用UIGraphicsGetImageFromCurrentImageContext)

當您執行步驟3時,現有圖像將在應用轉換的情況下繪制到新的圖形上下文中。 這里的竅門是,為了應用轉換,我們必須實際繪制一些東西。

您可以通過這種方式做一些非常酷的事情。 您可以繪制一半的圖像,應用一些變換,再繪制更多。

如其他答案所述,轉換僅適用於后續的繪制操作。 它們不會影響您開始使用的像素緩沖區。

因此,您需要進行繪圖操作。 解決方案是創建一個CGImage ; 繪制該圖像是一個繪制操作,因此將使用當前的變換矩陣(CTM)。

一步步:

  1. 使用像素數據創建上下文。 (如果您為緩沖區傳遞NULL ,則Quartz應該為您創建它們。無論如何在Mac上都可以。)
  2. 使用要繪制的像素數據轉換圖像來創建圖像。
  3. 在上下文中轉換CTM。
  4. 繪制圖像。

繪制圖像后,必須調用CGBitmapContextCreateImage()。

然后,您可以在第一個圖像上繪制另一個圖像,然后再次調用CGBitmapContextCreateImage()以獲取第二個圖像。 您可以使用CGContextSetAlpha(ctx,alphaValue);設置alpha。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM