[英]Corrupt pixels when combining images in iOS
我正在嘗試將兩張照片合並為一張圖片(想想一張在另一個人臉上的照片頂部有一個洞的身體)。 頂部圖像有一些半透明像素和一些完全透明的像素,我想將它疊加在實心圖像上。
這就是我正在做的事情:我有一個大小合適的Context,我在其上繪制底部圖像,沒有任何alpha(faceImage)。 最重要的是,我繪制了一個有透明孔的圖像,具有不同級別的透明度(coverImage):
UIGraphicsBeginImageContext(view.bounds.size);
[faceImage drawAtPoint:CGPointMake(0, 0) blendMode:kCGBlendModeNormal alpha:1];
[coverImage drawAtPoint:CGPointMake(0, 0) blendMode:kCGBlendModeNormal alpha:1];
UIImage *combinedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
最終圖像中的結果非常出乎意料:
在頂部圖像沒有透明度的像素中,最終圖像被正確保存並顯示頂部圖像中的像素。 ( 好的 )
在頂部圖像具有完全透明度的像素中,最終圖像被正確保存並顯示底部圖像中的像素。 ( 好的 )
在頂部圖像具有半透明像素並且亮度非常輕 (最終像素的亮度)的像素中,我突然得到完全透明的像素 (而不是沒有透明度的最終像素,其是頂部像素和底部之間的混合)像素)。 (WTF?)
在下面的圖像中,您可以看到奇怪的白色斑點。 那些是完全透明像素的像素(通過它們看到白色背景):
這是我放在上面的圖像:
這是底部的臉部圖像:
可能導致這種情況的任何想法?
TIA
2個一般可能的線索:
干杯,
俄德。
我們從未真正發現導致問題的原因,但確實發現當您更改應用程序中半透明圖像的亮度並保存時,會出現問題。 如果預加載明亮的圖像,則不會出現問題。
(也許它與iPhone優化的PNG有關,如Oded的鏈接中所述)
因此,作為解決問題的解決方法,我們只需在亮度改變后暫時保存圖像,然后將保存的圖像用於最終混合。 這是我們添加的代碼:
NSData *coverImageData = UIImagePNGRepresentation(coverImage);
coverImage = [UIImage imageWithData:coverImageData];
正如您所看到的,我們實際上並不將圖像保存為文件,只需將其存儲為PNG表示,然后將其加載回來即可。
完全破解,但它完成了工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.