Tôi đang sử dụng đoạn mã này để nạp tập tin hình ảnh khác nhau:WPF BitmapImage và TIFF với CMYK + Alpha
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = new System.Uri (path);
bitmap.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
bitmap.EndInit();
này hoạt động tốt cho các tập tin TIFF lưu trữ như RGB, RGB + Alpha và CMYK.
Tuy nhiên, nếu tôi cố tải một tệp TIFF bằng cách sử dụng các màu CMYK và kênh alpha, tôi nhận được một ngoại lệ (định dạng tệp không được nhận dạng là hợp lệ bởi bộ giải mã).
Tôi trước đây đã sử dụng thư viện FreeImage và trình bao bọc C# mỏng trên đầu trang của nó. FreeImage 3.x có hỗ trợ một phần cho loại định dạng hình ảnh này, tức là tôi phải tải TIFF hai lần, một khi là CMYK không có độ trong suốt và một lần là RGB + Alpha; thủ thuật này là cần thiết vì FreeImage chỉ cho phép truy cập tối đa 4 kênh màu đồng thời.
Tôi muốn biết liệu có cách nào được hỗ trợ để tải bitmap CMYK + Alpha không? Hoặc là trực tiếp trong C# hoặc bằng cách đi qua một số mã interop, nhưng tốt nhất là không cần phải sử dụng một bên thứ ba DLL (khác với các thư viện khuôn khổ .NET 4).
Ví dụ về tệp TIFF như vậy có thể được tìm thấy here.
EDIT: Tôi không còn có thể tạo lại vấn đề, đoạn code sau làm việc tốt:
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = new System.Uri (path);
bitmap.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
bitmap.EndInit();
byte[] pixels = new byte[bitmap.PixelHeight*bitmap.PixelWidth*5];
bitmap.CopyPixels (pixels, bitmap.PixelWidth * 5, 0);
Nhưng tôi vẫn còn bị mắc kẹt: làm thế nào tôi có thể tìm ra rằng hình ảnh nguồn được mã hóa như CMYK cộng Kênh Alpha? Khi xem xét thuộc tính Format
, tôi chỉ nhận được thông tin rằng hình ảnh có 40 bit trên mỗi pixel. Tất cả nội dung thú vị được lưu trữ trong các thuộc tính không công khai sau:
bitmap.Format.FormatFlags == IsCMYK | NChannelAlpha;
bitmap.Format.HasAlpha == true;
Có cách nào chính thức để nhận được chúng, mà không phải phản ánh?
Bạn có bất kỳ liên kết nào đến TIFF sử dụng CMYK với kênh alpha nơi sự cố này xảy ra không? Tôi không thể tạo lại số này –
Tôi đã thêm một liên kết tới hình ảnh TIFF của tôi trong câu hỏi (http://www.opac.ch/files/cmyka.tif) –
Ah, bạn nói đúng. Xin lỗi, hoàn toàn bỏ lỡ nó .. –