在iOS上編寫地圖應用程序,使用OpenStreetMap切片。 地圖平鋪圖像被異步下載並存儲在字典中,或者保存在SQLite數據庫中。iOS上的PNG驗證
有時候,不管出於什麼原因,而爲了顯示地圖平鋪圖像,我得到以下錯誤:
ImageIO: <ERROR> PNGinvalid distance too far back
這將導致討厭的黑方塊出現在我的地圖。
這是一段代碼,在發生這種情況:
NSData *imageData = [TileDownloader RetrieveDataAtTileX:(int)tilex Y:(int)tiley Zoom:(int)zoomLevel];
if (imageData != nil) {
NSLog(@"Obtained image data\n");
UIImage *img = [[UIImage imageWithData:imageData] retain];
// Perform the image render on the current UI context.
// ERROR OCCURS BETWEEN PUSH AND POP
UIGraphicsPushContext(context);
[img drawInRect:[self rectForMapRect:mapRect] blendMode:kCGBlendModeNormal alpha:1.0f];
UIGraphicsPopContext();
[img release];
}
現在,我正在尋找一種方法來確保PNG是試圖使它對我的地圖之前有效。
編輯:該系統還偶爾會拋出這個錯誤:
ImageIO: <ERROR> PNGIDAT: CRC error
你得到一個UIImage對象回來的時候發生這種情況?我希望'img'是'nil',這是你的有效驗證。 – Tommy
那麼,鑑於我正在加載原始數據,並且它拋出了一個PNG錯誤,我懷疑UIImage對象是建立的,但其包含的數據是問題。 –
我認爲'+ imageWithData:'會更容易發現錯誤並返回'nil'。如果你已經測試過,那不是那麼公平,但我真的認爲你應該測試它。 – Tommy