Заполнение CGContext (_ rect: CGRect) не может соответствовать ожидаемому результату - PullRequest
1 голос
/ 27 марта 2020

Я новичок в кварце 2d, я только что создал контекст растрового изображения 400 * 300, а затем заполнил прямоугольник 200 * 200, но я получил прямоугольное изображение, а не квадратное, кто-нибудь может это объяснить?

    override func draw(_ rect: CGRect) {
        // Drawing code

        let myBoundingBox = UIScreen.main.bounds
        let myBitmapContext = myCreateBitmapContext(pixelWidth: 400 , pixelHeight: 300 )
        myBitmapContext?.setFillColor(red: 1, green: 0, blue: 0, alpha: 1)
        myBitmapContext?.fill(.init(x: 0, y: 0, width: 200, height: 200))
        guard let myImage = myBitmapContext?.makeImage() else { return }
        let context = UIGraphicsGetCurrentContext()
        context?.draw(myImage, in: myBoundingBox)

    }

    func myCreateBitmapContext(pixelWidth: Int, pixelHeight: Int) -> CGContext? {

        let bytesPerRow = pixelWidth * 4

        guard let colorSpace = CGColorSpace.init(name: CGColorSpace.sRGB) else { return nil }
        let context = CGContext.init(data: nil, width: pixelWidth, height: pixelHeight, bitsPerComponent: 8, bytesPerRow: bytesPerRow, space: colorSpace, bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)
        return context
    }

Drawing image

1 Ответ

0 голосов
/ 27 марта 2020

хорошо, изображение растягивается при рисовании, если я хочу получить предполагаемый ответ, мне нужно установить funtion draw(_ image: UIImage, in rect: CGRect, by Tiling: Bool = false) параметр rect размер такой же, как изображение, или изменить contentMode изображение, показывающее как imageView, однако я пока не знаю, как установить в Quartz 2D. затем я меняю код и в итоге получаю то, что ожидал.

context?.draw(myImage, in: CGRect(x: 0, y: 0, width: 400, height: 300))
...