月別アーカイブ: 2007年12月

[CGE]v1.06の特定のJpeg表示時の不具合について

色空間がCMYKで記録されてるJPEGを開くと表示がおかしくなる不具合がありましたが修正方法を見つけましたの修正します。

Adobe社のPhotoShopなどで作成できる色空間がCMYKで記録されてるJPEGを開くと表示がおかしくなるのはDelphiに付属しているTJPEGImageではサポートされてないことが原因でした。

当初IE6でも表示が出来ないためサポートしない予定でしたが、少し調べてみたところCMYKでは1ピクセルあたり4バイトであるのに対して、
TJPEGImageでは常にRGBの値が来るというようにしか組まれておらず1ピクセルあたり3バイトのバッファしか提供していませんでした。

そこで、CMYKのJPEGのときは4バイトを読み込み、CMYK→RGB変換を行いRGBの3バイトのを渡す処理を追加しました。

送られたRGBはYCbCrに変換される仕様なので特に後続処理に影響はないと思いますがテストを思いつく限りやっておきます。

また、1つ問題があり、CMYK画像の色合いを完璧には再現できていません。印刷系の知識のある方だとわかるかと思いますが、CMYKはインクの量を記録したものであり、使用するインクによって色が変わります。そこでPhotoShopなどではインクのプロファイルを使用し複雑な計算を行うことで色を変換しております。

つまり今回の修正では、インクプロファイルの参照をしていない、最低限のCMYK→RGB変換ですので実際の色とは誤差が出ています。

一応読取として対応はしましたが出来る限りCMYKのJpegで保存しないことをお勧めいたいします。