簡體   English   中英

iOS加載16位單通道圖像

[英]iOS Loading 16bit Single Channel Image

我有一個16位的灰度圖像。 我已經嘗試過.png和.tif。 .tif可以工作。 我有以下代碼:

CGDataProviderRef l_Img_Data_Provider = CGDataProviderCreateWithFilename( [m_Name cStringUsingEncoding:NSASCIIStringEncoding] );
CGImageRef l_CGImageRef = CGImageCreate( m_Width, m_Height, 16, 16, m_Width * 2,
                                        CGColorSpaceCreateDeviceGray(), kCGBitmapByteOrder16Big, l_Img_Data_Provider, NULL, false, kCGRenderingIntentDefault );
test_Image = [[UIImage alloc] initWithCGImage:l_CGImageRef];
[_test_Image_View setImage:test_Image];

這將導致以下圖像: 錯誤的漸變

如您所見,圖像的開頭似乎存在問題(它是否試圖使用標頭中的字節數據?),並且圖像偏移了大約五分之一(更難看,看起來在左右兩側,有一條模糊的線,距離右邊約五分之一。

我的目標是將其轉換為金屬質感並從那里使用它。 也有問題。 似乎是字節順序問題,但也許我們可以再談談。

戴夫

CGDataProvider不知道其存儲的數據格式。 它僅用於處理通用數據:

“ CGDataProvider頭文件聲明了一種為Quartz函數提供數據的數據類型。數據提供程序對象抽象了數據訪問任務,並且不需要應用程序通過原始內存緩沖區來管理數據。”

CGDataProvider

由於CGDataProvider是通用的,因此必須使用CGImageCreate參數提供圖像數據的格式。 PNG和JPG具有自己的CGImageCreateWith..函數,用於處理編碼數據。

您的示例中的CGImage參數正確描述了16位灰度原始字節格式,但與TIF編碼無關,因此我猜您在看到損壞的像素來自文件頭時是正確的。

可能還有其他方法可以在iOS上加載16位灰度圖像,但是要使用該方法(或非常類似的Metal方法),您需要解析TIF文件中的圖像字節並將其傳遞給函數,或創建另一個存儲和解析圖像數據的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM