Tôi có mã này để che một hình ảnh. Về cơ bản, tôi chỉ làm việc với hình ảnh PNG. Vì vậy, tôi có hình ảnh PNG 300x400 với 24 bit màu (PNG-24). Tôi không chắc chắn nếu nó cũng có một kênh alpha. Nhưng không có sự minh bạch trong nó.Bất kỳ ý tưởng nào tại sao mã mặt nạ hình ảnh này không hoạt động?
Sau đó, có mặt nạ hình ảnh là PNG-8bit không có kênh alpha. Nó chỉ là đen, xám và trắng.
Tôi tạo cả hai hình ảnh dưới dạng UIImage. Cả hai hiển thị chính xác khi đưa chúng vào UIImageView.
Sau đó, tôi tạo ra một UIImage ra trong số họ, trong đó có kết quả của các hoạt động tạo mặt nạ, với mã này:
+ (UIImage*)maskImage:(UIImage*)image withMask:(UIImage*)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
return [UIImage imageWithCGImage:masked];
}
đây là những gì tôi làm với điều đó:
UIImage *image = [UIImage imageNamed:@"coloredImagePNG24.png"];
UIImage *maskImage = [UIImage imageNamed:@"theMaskPNG8_Grayscale_NoAlpha.png"];
UIImage *maskedImage = [MyGraphicUtils maskImage:image withMask:maskImage];
UIImageView *testImageView = [[UIImageView alloc] initWithImage:maskedImage];
testImageView.backgroundColor = [UIColor clearColor];
testImageView.opaque = NO;
Sau tất cả những gì, colorImagePNG24.png vẫn giữ nguyên nguyên vẹn. Không có mặt nạ nào đang xảy ra. Nhưng bây giờ điều kỳ lạ là: Nếu tôi xoay nó lại, tức là sử dụng hình ảnh này làm mặt nạ và mặt nạ làm mặt nạ màu, sau đó tôi nhận được một thứ rất xấu trong màu xám (nhưng bị che khuất;)).
Bất kỳ ý tưởng nào có vấn đề với mã của tôi?
CẬP NHẬT: Tôi vừa googled cho một b/w png khác để sử dụng làm mặt nạ. Và sau đó điều này đã làm việc! Nhưng cái tôi tự làm ra không hoạt động. Vì vậy, tôi giả định rằng mã có vấn đề giải mã hình ảnh lớn. Tôi sẽ phải "bình thường hóa" các hình ảnh theo một định dạng cụ thể, để nó hoạt động.
Mặc dù trông khá, trong trường hợp của tôi nó chỉ làm cho hình ảnh hoàn toàn trong suốt. Xem cập nhật của tôi ở trên. Tôi đã tìm ra điều gì đó kỳ lạ. – Thanks
Tôi đã sử dụng một biến thể trên đoạn mã trên với các mặt nạ được tạo trong Photoshop được chuyển đổi thành "Grayscale" và được xuất dưới dạng PNG 24 bit. – Ramin
Nếu bạn muốn sử dụng mã trên, hãy đảm bảo tệp hình ảnh của bạn chứa mặt nạ là PNG 24 bit làm _not_ có kênh alpha. Pixelmator, ví dụ, không cho bạn biết thông tin này. Bạn cần sử dụng Photoshop hoặc GIMP. –