簡體   English   中英

在iOS中組合圖像時損壞像素

[英]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個一般可能的線索:

  1. 您正在繪制的視圖是不透明的嗎? (http://stackoverflow.com/questions/1451977/transparent-color-works-on-the-simulator-but-becomes-black-on-the-iphone)
  2. 有關Alpha通道預乘的一些信息(http://iphonedevelopment.blogspot.com/2008/10/iphone-optimized-pngs.html)

干杯,

俄德。

我們從未真正發現導致問題的原因,但確實發現當您更改應用程序中半透明圖像的亮度並保存時,會出現問題。 如果預加載明亮的圖像,則不會出現問題。

(也許它與iPhone優化的PNG有關,如Oded的鏈接中所述)

因此,作為解決問題的解決方法,我們只需在亮度改變后暫時保存圖像,然后將保存的圖像用於最終混合。 這是我們添加的代碼:

NSData *coverImageData = UIImagePNGRepresentation(coverImage);
coverImage = [UIImage imageWithData:coverImageData];

正如您所看到的,我們實際上並不將圖像保存為文件,只需將其存儲為PNG表示,然后將其加載回來即可。

完全破解,但它完成了工作。

暫無
暫無

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

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