iOS版橘花伪春菜开发笔记之shell的pna文件的处理

7年前 (2017-09-03) fancyang 伪春菜移动版相关 0评论 已收录 4908℃

之间苦于探索pna的加载问题,还走了弯路用webkit的html5来封装,感谢@PygmalionV提供的代码,这个代码能让pna提供png文件的透明模版。

 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import UIKit

class ViewController: UIViewController{
  override func viewDidLoad() {
        super.viewDidLoad()
           let img = UIImage(named:"res/surface0000.png")! //为源图形创建一个图像类
        let maskimg = UIImage(named:"res/surface0000.pna")! //为图形蒙板创建一个图像类
        let alphaimg = UIImage(cgImage:mask(img.cgImage!,maskimg.cgImage!))
        let imageView=UIImageView(image:alphaimg)//创建一个图像视图用作图像的容器
        self.view.addSubview(imageView)//把图像视图添加到当前的根视图
    }
     
    func mask(_ cgimage:CGImage,_ maskimage:CGImage)->CGImage{
        let colorSpace=CGColorSpaceCreateDeviceGray()//创建一个设备相关的灰度颜色空间的引用
        let bitmapInfo=CGBitmapInfo(rawValue:CGBitmapInfo().rawValue|CGImageAlphaInfo.none.rawValue)//创建像素位图
        let context=CGContext(data:nil,width:maskimage.width,height:maskimage.height,bitsPerComponent:8,bytesPerRow:0,space:colorSpace,bitmapInfo:bitmapInfo.rawValue)//创建图形画布,其中宽高度为maskimage的宽高度,maskimage为提供蒙版的文件如PNA,,bitsPerComponent:8代表图片每个颜色所占的bits,图形为32位,每个颜色通道占用8位,共4个通道,RGBA,R=RED,G=GREEN,B=BLUE,A=ALPHA。
        context?.draw(maskimage,in:CGRect(x:0,y:0,width:maskimage.width,height:maskimage.height))//用创建的图形画布绘制图形
        let greyImage=context?.makeImage()//将图形画布的图形传递给greyImage
        return cgimage.masking(greyImage!)!//将greyImage的图形用作源图形cgimage的图层萌版
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}




                                       
                      
博主

这货来去如风,什么鬼都没留下!!!

相关推荐

嗨、骚年、快来消灭0回复。

000414;您的ip地址是18.97.9.174; 当前围观人数:1

隐私政策

橘花2支持在线更新了,点我下更新支持文档然后托给橘花,再点SSP面板右键更新