Dokonce i po nanesení všechno, co jsem již zmínil, jsem ještě měl dramata s obrázky. Na konci jsem právě používá Gimp vytvořit ‚převrácenou vertikální‘ verze všech svých snímků. Teď už nemusíte používat žádné transformace. Doufejme, že to nebude způsobovat další problémy dolů trati.
Ví někdo, proč CGContextDrawImage bude kresba můj obraz vzhůru nohama? Jsem nahrává obraz po mé žádosti:
Quartz2d používá jiný souřadný systém, kde je původ je v levém dolním rohu. Takže když Quartz čerpá pixel x [5], y [10] 100 * 100 obrazu, který pixel je vypracován v levém dolním rohu místo v levém horním rohu. Což způsobuje, že ‚převrácený‘ image.
X koordinovat systém zápasů, takže budete muset otočit y souřadnic.
CGContextTranslateCTM(context, 0, image.size.height);
To znamená, že jsme přeložil obraz 0 jednotkách na ose x a výškou obrazu na ose y. Nicméně, to samo o sobě bude znamenat náš obraz je stále vzhůru nohama, jen aby byly vtahovány „image.size.height“ níže, kde jsme ho chtěli být vypracovány.
Programový průvodce Quartz2D doporučuje používat ScaleCTM a předávání záporné hodnoty pro převrácení obrazu. Můžete použít následující kód, jak to udělat -
CGContextScaleCTM(context, 1.0, -1.0);
Kombinují dva těsně před CGContextDrawImagevolání a vy byste měli mít obraz správně vypracovány.
UIImage *image = [UIImage imageNamed:@"testImage.png"];
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, imageRect, image.CGImage);
Jen si dejte pozor, pokud vaše imageRect koordinuje neodpovídají vašeho obrazu, jak se můžete dostat nezamýšlené výsledky.
Chcete-li převést zpět souřadnic:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);