[英]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是在轉換后創建的。 初始化沒有問題,因為當前正在生成原始圖像,但是問題在於我想的翻譯。
轉換為圖形狀態只會影響后續的繪圖操作-不會更改現有的圖像數據。 如果要將變換應用於圖像,請嘗試如下操作:
當您執行步驟3時,現有圖像將在應用轉換的情況下繪制到新的圖形上下文中。 這里的竅門是,為了應用轉換,我們必須實際繪制一些東西。
您可以通過這種方式做一些非常酷的事情。 您可以繪制一半的圖像,應用一些變換,再繪制更多。
如其他答案所述,轉換僅適用於后續的繪制操作。 它們不會影響您開始使用的像素緩沖區。
因此,您需要進行繪圖操作。 解決方案是創建一個CGImage ; 繪制該圖像是一個繪制操作,因此將使用當前的變換矩陣(CTM)。
一步步:
NULL
,則Quartz應該為您創建它們。無論如何在Mac上都可以。) 繪制圖像后,必須調用CGBitmapContextCreateImage()。
然后,您可以在第一個圖像上繪制另一個圖像,然后再次調用CGBitmapContextCreateImage()以獲取第二個圖像。 您可以使用CGContextSetAlpha(ctx,alphaValue);設置alpha。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.