2009-04-24 43 views
7

Tôi đang cố gắng để thay đổi kích thước một hình ảnh sử dụng stretchableImageWithLeftCapWidth: nó hoạt động trên trình giả lập, nhưng trên thiết bị, quán bar xanh dọc xuất hiện.Thay đổi kích thước một hình ảnh với stretchableImageWithLeftCapWidth

Tôi đã cố gắng sử dụng imageNamed, imageWithContentOfFile và imageWithData lo tải hình ảnh, nó không thay đổi.

UIImage *bottomImage = [[UIImage imageWithData: 
    [NSData dataWithContentsOfFile: 
    [NSString stringWithFormat:@"%@/bottom_part.png", 
    [[NSBundle mainBundle] resourcePath]]]] 
     stretchableImageWithLeftCapWidth:27 topCapHeight:9]; 

UIImageView *bottomView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 200+73, 100, 73)]; 
[self.view addSubview:bottomView]; 
UIGraphicsBeginImageContext(CGSizeMake(100, 73)); 
[bottomImage drawInRect:CGRectMake(0, 0, 100, 73)]; 
UIImage *bottomResizedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
bottomView.image = bottomResizedImage; 

Xem kết quả: các thanh màu xanh không nên ở đó, chúng không xuất hiện trên trình giả lập.

alt text http://www.quicksnapper.com/files/5161/96232162149F1C14751048_m.png

Trả lời

12

Bạn đã xác định điều này?

Có vẻ như nó có thể là một lỗi với UIGraphicsGetImageFromCurrentImageContext. Nếu tôi vẽ một hình ảnh có độ trong suốt thì tôi sẽ nhận được các hiện vật màu đỏ/xanh lá cây. Chúng chỉ xuất hiện trên thiết bị (không phải trong sim). Ngoài ra, nếu tôi loại bỏ độ trong suốt khỏi hình ảnh, các đồ tạo tác sẽ biến mất.

Cập nhật: Một số điều kỳ lạ hơn. Tôi đã sử dụng PNG trước đây, vì vậy tôi đã thử sử dụng gif trong suốt thay thế. Sử dụng GIF, hiển thị vấn đề tạo tác trên sim.

Chiến thắng! Tìm thấy một giải pháp:

Tắt 'Compress PNG Files' trong các thiết lập xây dựng cho dự án của bạn. Vô hiệu hóa điều này làm cho tính minh bạch PNG hoạt động mà không có bất kỳ hiện vật nào.

+0

Ồ, cảm ơn bạn. –

5

Nó có vẻ như bạn đang viết rất nhiều mã không cần thiết, nhưng có lẽ đó chỉ là vì nó ra khỏi bối cảnh và có nhiều đến nó mà tôi đang thiếu.

Để có được hình ảnh:

[[UIImage imageName: @"bottom_part.png"] stretchableImageWithLeftCapWidth: 27 topCapHeight: 9]; 

gì một phần của mã của bạn được hiển thị bạn hình ảnh này? tức là trong cuộc gọi phương thức nào, bạn vẽ các hình ảnh ở trên?

Tại sao không chỉ sử dụng UIImageView và đưa hình ảnh vào đó? Sau đó, bạn không cần phải thực hiện bất kỳ bản vẽ ngữ cảnh hình ảnh nào, v.v.

0

tôi đã dành 5 giờ gỡ lỗi đêm qua này, vô hiệu hóa các file nén PNG trong xcode đã không làm bất cứ điều gì cho tôi.

Đối với bất kỳ ai khác đang họp dọc, xanh lục, vạch/đường/hiện vật có thể kéo dàiImageWithLeftCapWidth (trong UIImage API) - bài đăng này dành cho bạn.

Tôi có một 21x30 cho một barbutton nền tùy chỉnh mà tôi muốn mở rộng, nhưng có các sọc màu xanh lá cây giống như OP. Tôi tìm thấy một PNG được tạo ra với photoshop và làm việc tốt - tôi được làm bằng GIMP. Dù sao, tước TẤT CẢ các đoạn từ các tập tin (ngoại trừ ba thứ thiết yếu) không có sự khác biệt. Không tắt tính năng nén PNG.

gì đã làm việc cho tôi là thế này:

  1. thêm một dòng sản phẩm nào trên hình ảnh của tôi (mà bây giờ là 21x31).
  2. Đặt topCapHeight: 0 khi tạo hình ảnh được chia tỷ lệ.
  3. Khi tôi sử dụng hình ảnh được chia tỷ lệ của mình, tôi vẽ thành CGContext, sau này được sử dụng để tạo UIImage.Tôi sử dụng điều này để vẽ: [image drawInRect: CGRectMake (0, -2, width, 32)];

Điều này làm cho vấn đề biến mất (đối với tôi).

Tôi giả định rằng lỗi/vấn đề phải làm với không chia tỷ lệ theo chiều dọc khi vẽ, vì vậy tôi buộc mở rộng dòng hình ảnh nguồn đầu tiên (thành hai dòng), vẽ bên ngoài bố cục của tôi.

Tôi hy vọng điều này giúp ai đó tiết kiệm được 5 giờ.

/Krisb

1

Trong trường hợp của tôi, tôi đã có UIImageView mà tôi trải rộng theo chiều ngang. Tôi tìm thấy một đường thẳng đứng màu trắng kỳ lạ trong hình ảnh kéo dài.

Các giải pháp trên không hiệu quả đối với tôi. Tuy nhiên, sau đây đã làm:

Cast giá trị chiều rộng đến một giá trị int:

myNewViewFrame.size.width = (int)newWidth; 
myView.frame = myNewViewFrame; 

Hy vọng nó hoạt động cho các bạn cũng ...

+0

Cảm ơn Henrik, tôi đã có cùng một vấn đề chính xác và điều này đã sửa nó. – Echelon

0

tôi đã ngừng sử dụng stretchableImageWithLeftCapWidth ủng hộ nhiều của UIView thuộc tính nội dung được xử lý tốt hơn. Tôi chưa bao giờ thấy các thanh màu xanh lá cây mà bạn đang mô tả, nhưng nói chung tôi sẽ khuyên bạn nên sử dụng contentStretch thay vì stretchableImageWithLeftCapWidth.

+0

Làm thế nào để bạn có được endcaps với contentStretch? – Adam

0

Tôi đã cố tắt tính năng nén PNG như Nate được đề xuất, nhưng điều này sẽ không hoạt động đối với tôi (iOS 3.1.3). Sau đó tôi đã thử sử dụng hình ảnh TIFF thay vì PNG, hoạt động.

0

Tôi đã tìm thấy các sự cố tương tự với contentStretch (trên bất kỳ UIView nào đã vẽ nội dung) khi sử dụng giá trị (0,5, 0,5, 0, 0). tức là trải dài trên pixel trung tâm.

Tôi nhận thấy rằng chỉ có iPhone 3G (có thể 2G) trưng bày sự cố này. iphone 4 và 3GS là OK. Vì vậy, tôi cho rằng đây là một vấn đề với đồ họa HW cũ.

cách tôi tìm thấy xung quanh vấn đề là kéo dài trên khu vực trung tâm lớn hơn một chút.

ví dụ: (0,4, 0,4, 0,1, 0,1)

+0

lưu ý tôi đồng ý và xem những vấn đề này xảy ra trên 3g nhưng không phải 3gs và 4 – yeahdixon

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