亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

CGContextDrawImage在傳遞UIImage.CGImage時將圖像上下顛倒

CGContextDrawImage在傳遞UIImage.CGImage時將圖像上下顛倒

iOS
心有法竹 2019-11-22 10:18:58
有誰知道為什么CGContextDrawImage要將我的形象顛倒過來?我正在從應用程序中加載圖像:UIImage *image = [UIImage imageNamed:@"testImage.png"];然后簡單地要求核心圖形將其繪制到我的上下文中:CGContextDrawImage(context, CGRectMake(0, 0, 145, 15), image.CGImage);它在正確的位置和尺寸進行渲染,但是圖像是顛倒的。我一定會在這里遺漏一些真正明顯的東西嗎?
查看完整描述

3 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

代替


CGContextDrawImage(context, CGRectMake(0, 0, 145, 15), image.CGImage);

使用


[image drawInRect:CGRectMake(0, 0, 145, 15)];

在開始/結束CGcontext方法的中間。


這會將具有正確方向的圖像繪制到當前圖像上下文中-我很確定這與UIImage保持方向知識有關,而該CGContextDrawImage方法在不了解方向的情況下獲取了基礎原始圖像數據。


查看完整回答
反對 回復 2019-11-22
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

即使應用了我提到的所有內容,我仍然會在影像上留下戲劇。最后,我只是使用Gimp為我的所有圖像創建了“垂直翻轉”版本?,F在,我不需要使用任何變換。希望這不會造成進一步的問題。


有誰知道為什么CGContextDrawImage會顛倒繪制我的圖像?我正在從應用程序中加載圖像:


Quartz2d使用不同的坐標系,其原點位于左下角。因此,當Quartz繪制100 * 100圖像的像素x [5],y [10]時,該像素是在左下角而不是左上角繪制的。從而導致“翻轉”圖像。


x坐標系匹配,因此您需要翻轉y坐標。


CGContextTranslateCTM(context, 0, image.size.height);

這意味著我們已經在x軸上平移了圖像0個單位,在y軸上平移了圖像的高度。但是,僅此一項就意味著我們的圖像仍然是上下顛倒的,只是在我們希望繪制的位置下方繪制了“ image.size.height”。


Quartz2D編程指南建議使用ScaleCTM并傳遞負值來翻轉圖像。您可以使用以下代碼執行此操作-


CGContextScaleCTM(context, 1.0, -1.0);

在CGContextDrawImage通話之前將兩者結合起來,應該可以正確繪制圖像。


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);

請小心,如果您的imageRect坐標與圖像的坐標不匹配,因為這樣可能會導致意外的結果。


轉換回坐標:


CGContextScaleCTM(context, 1.0, -1.0);

CGContextTranslateCTM(context, 0, -imageRect.size.height);


查看完整回答
反對 回復 2019-11-22
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

兩全其美,請使用UIImage drawAtPoint:或drawInRect:同時指定您的自定義上下文:


UIGraphicsPushContext(context);

[image drawAtPoint:CGPointZero]; // UIImage will handle all especial cases!

UIGraphicsPopContext();

另外,您還避免使用第二個答案所做的CGContextTranslateCTM或修改您的上下文CGContextScaleCTM。


查看完整回答
反對 回復 2019-11-22
  • 3 回答
  • 0 關注
  • 1072 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號