2012-02-23 31 views
5

Tôi đang cố gắng hiểu hệ thống tọa độ 2d thạch anh, Hiện tại tôi đang đọc sách hướng dẫn tham khảo của Apple và cuốn sách cũ "Đồ họa 2d cho nhà phát triển mac os x".Không thể hiểu được việc chuyển đổi hệ thống phối hợp đồ họa lõi iOS, cần hỗ trợ

Tôi hiểu khái niệm về không gian người dùng và khái niệm không gian thiết bị mà không gian thiết bị có thể có hệ tọa độ mặc định và tọa độ không gian thiết bị không thể sửa đổi được và chúng tôi ánh xạ không gian người dùng bằng cách sửa đổi hệ thống tọa độ của nó. để thiết bị-không gian để đạt được kết quả mong muốn.


  • phần thứ nhất của vấn đề

Quartz đồ họa 2d cho mac book os x nhà phát triển cho biết:

Khi chuyển đổi một hệ tọa độ, bạn phải có hệ thống phối hợp khác để so sánh nó với. Phép biến đổi cung cấp một ánh xạ tương đối từ một hệ tọa độ này sang hệ tọa độ khác. Khi bạn vẽ trong hệ tọa độ được chuyển đổi, phép biến đổi ánh xạ đồ họa trở lại hệ tọa độ đầu tiên. Sự xuất hiện của đồ họa trong hệ tọa độ cố định bị ảnh hưởng bởi việc chuyển đổi .

tôi không được in đậm điểm này.

Quartz 2D programming guide nói:

thạch anh hoàn thành thiết bị độc lập với một riêng biệt phối hợp hệ thống sử dụng không gian lập bản đồ nó vào hệ tọa độ của đầu ra thiết bị thiết bị không gian sử dụng hiện tại ma trận chuyển đổi hoặc CTM. Ma trận là một cấu trúc toán học được sử dụng để mô tả hiệu quả tập hợp của các phương trình có liên quan. Ma trận chuyển đổi hiện tại là một loại ma trận biến đổi được gọi là biến đổi affine, được ánh xạ điểm từ một không gian tọa độ này sang không gian khác bằng cách áp dụng dịch thuật, xoay vòng và chia tỷ lệ (các phép tính di chuyển, xoay và thay đổi kích thước hệ tọa độ) .

Ma trận chuyển đổi hiện tại có mục đích phụ: Nó cho phép bạn chuyển đổi cách đối tượng được vẽ. Ví dụ: để vẽ một hộp được xoay 45 độ, bạn xoay hệ tọa độ của trang (CTM) trước khi vẽ hộp. Quartz vẽ đến thiết bị đầu ra bằng cách sử dụng hệ tọa độ xoay.

Lẫn lộn là "Quartz vẽ đến thiết bị đầu ra bằng hệ tọa độ xoay.", Nếu tôi muốn xoay một đối tượng (hình ảnh vv) và xoay vòng khác với điều gì xảy ra? Chúng tôi có toàn bộ tọa độ xoay mọi thứ sẽ được rút ra được xoay?

Tôi đang thử các thử nghiệm khác nhau nhưng không thể quấn đầu xung quanh, tôi tạo một hình ảnh bản vẽ hai dòng sao chép hệ tọa độ dưới cùng bên trái trong photoshop và sau đó thêm vào dự án của tôi để xem rõ cách tọa độ hoạt động bằng cách gọi CGContextRotateCTM(myContext, 45); phương pháp drawrect, nhưng nó không làm bất cứ điều gì để hình ảnh mà tôi đã bao gồm trong tập tin xib bằng cách sử dụng xây dựng giao diện đặt hình ảnh bên trong uiimage.

mã này là từ thạch anh hướng dẫn lập trình 2D

CGContextRef myContext = UIGraphicsGetCurrentContext(); 
CGRect contextRect = self.bounds; 

CGContextTranslateCTM(myContext, 0, contextRect.size.height); 
CGContextRotateCTM(myContext, 45); //my modification 
CGContextScaleCTM(myContext, 1, -1); 

float w, h; 
w = contextRect.size.width; 
h = contextRect.size.height; 

CGAffineTransform myTextTransform; 
CGContextSelectFont (myContext, "Helvetica-Bold", h/10, kCGEncodingMacRoman); 
CGContextSetCharacterSpacing (myContext, 10); 
CGContextSetTextDrawingMode (myContext, kCGTextFillStroke); 

CGContextSetRGBFillColor (myContext, 0, 1, 0, .5); 
CGContextSetRGBStrokeColor (myContext, 0, 0, 1, 1); 
myTextTransform = CGAffineTransformMakeRotation(0); 
CGContextSetTextMatrix (myContext, myTextTransform); 
CGContextShowTextAtPoint (myContext, 0, 50, "Quartz 2D", 9); 

nhưng mã này được sửa đổi văn bản được vẽ trên màn hình không phải là hình ảnh tôi đã thêm?


  • Thứ hai phần của vấn đề

Đây cũng là từ hướng dẫn lập trình Quartz 2D:

... áp dụng một chuyển đổi mà dịch nguồn gốc đến góc trên bên trái góc của ngữ cảnh PDF và chia tỷ lệ y thành -1.

Sử dụng phép biến đổi tỷ lệ để phủ nhận tọa độ y thay đổi một số quy ước trong bản vẽ Quartz. Ví dụ: nếu bạn gọi CGContextDrawImage để vẽ hình ảnh vào ngữ cảnh, hình ảnh là được sửa đổi bằng biến đổi khi được đưa vào điểm đến. ...

Tôi đã làm điều này -1 nhưng không ảnh hưởng đến hình ảnh và điều -1 này vẫn chưa rõ ràng đối với tôi.

Tôi đã đọc tài liệu này nhiều lần, thử tìm kiếm trên google nhưng không có hướng dẫn hữu ích và cũng không có sách mới nhất chỉ có sách được viết năm 2004, 2005, 2006. Có thể giúp bất kỳ ai tìm hiểu sâu hơn.

Mong đợi chờ đợi câu trả lời, thực sự cần trợ giúp. Cảm ơn bạn.

Trả lời

0

Bạn có đang sử dụng lớp con UIImageView và drawRect ghi đè không? Điều này không được hỗ trợ (xem tài liệu) và có lẽ lý do tại sao hình ảnh của bạn không bị ảnh hưởng bởi bất kỳ phép biến đổi nào.

Nếu bạn muốn làm rất nhiều biến đổi và mã vẽ bespoke sau đó bạn nên sử dụng một lớp con UIView và vẽ hình ảnh của bạn bằng tay sử dụng CGContextDrawImage()

Bất kỳ biến đổi được áp dụng để vẽ các hoạt động thực hiện sau khi biến đổi. Bạn sẽ thấy các mẫu mã trong các tài liệu mà trạng thái đồ họa được lưu, một biến đổi được áp dụng, một số bản vẽ đã hoàn thành, và sau đó bối cảnh được khôi phục. Đây là cách bạn vẽ một số thành phần xoay và một số thành phần không.

Hy vọng rằng phần thứ hai của câu hỏi của bạn sẽ trở nên rõ ràng khi bạn vẽ hình ảnh của mình qua mã CG chứ không phải qua chế độ xem hình ảnh.

+0

tôi đang sử dụng UIView phân lớp và trong drawRect của tôi đang viết tất cả các mã. chỉ muốn nhìn thấy hành vi rõ ràng của tọa độ và chuyển đổi mà tại sao tôi thêm hình ảnh vẽ hai dòng trình bày tọa độ dưới cùng bên trái đó là thạch anh 2d mặc định. Trong tập tin xib tôi đặt hình ảnh đó vào uiimage. Tôi sửa đổi quan điểm này không uiimage với các lớp con, trong đó tôi đang làm tất cả các mã, do đó, toàn bộ xem là một lớp con của lớp draw2d mà tôi tạo ra. cảm ơn bạn đã trả lời. – Pamy

+0

Bạn có ý nghĩa gì với "trong tập tin xib i đặt hình ảnh trong UIImage"? Tôi đọc đây là bạn đặt câu hỏi khi bạn tạo một uiimageview, vì bạn không thể tạo UIImage trong một tệp xib. Tôi không hiểu làm thế nào bạn đã thiết lập này, bạn có thể đặt một số ảnh chụp màn hình trong câu hỏi của bạn? – jrturton

+0

tôi đã kéo và thả uiimageview và trong đó tôi đặt hình ảnh tọa độ và không làm bất kỳ điều gì khác, sau khi thực hiện điều này và viết mã chuyển đổi tất cả tôi đã mong đợi hình ảnh đó cũng sẽ xoay và tôi sẽ thấy rõ các tọa độ bây giờ, vì vậy tôi có thể hiểu mã dễ dàng. – Pamy

Các vấn đề liên quan