こんにちは、私は Libtiff と画像処理にまったく慣れていません。Bitmiracle から Libtiff.net を使用しようとするときに質問があります。
私はいくつかの OJPEG TIFF 画像を持っており、それらを最近の JPEG TIFF に変換したいと考えています。ソースを BMP に変換してから TIFF (圧縮: JPEG、フォトメトリック: RGB) として保存することで実現しましたが、画像のサイズがかなり大きくなります。そこで、サイズを大幅に縮小できる YCbCr のフォトメトリックで圧縮できないかと考えました。
ただし、フォトメトリックを RGB から YCbCr に変更すると、プログラムが機能しなくなります。出力は 8 バイトしかありません (入力は約 400kb です)。画像を TXT として開くと、次のように表示されます。
「Ⅱ*」
私が使用するコードは次のとおりです。
byte[] raster1 = getImageRasterBytes(inputbmp[0], PixelFormat.Format24bppRgb);
tif1.SetField(TiffTag.IMAGEWIDTH, inputbmp[0].Width);
tif1.SetField(TiffTag.IMAGELENGTH, inputbmp[0].Height);
tif1.SetField(TiffTag.COMPRESSION, Compression.JPEG);
tif1.SetField(TiffTag.PHOTOMETRIC, Photometric.YCBCR);
tif1.SetField(TiffTag.ROWSPERSTRIP, inputbmp[0].Height);
//tif1.SetField(TiffTag.JPEGQUALITY, confidence);
tif1.SetField(TiffTag.XRESOLUTION, 200);
tif1.SetField(TiffTag.YRESOLUTION, 200);
tif1.SetField(TiffTag.BITSPERSAMPLE,8);
tif1.SetField(TiffTag.SAMPLESPERPIXEL, 3);
int stride = raster1.Length / inputbmp[0].Height;
convertSamples(raster1, inputbmp[0].Width, inputbmp[0].Height);
for (int i = 0, offset = 0; i < inputbmp[0].Height; i++)
{
tif1.WriteScanline(raster1, offset, i, 0);
offset += stride;
}
WriteScanline が YCbCr 出力を処理できるかどうかはよくわかりません。他の方法があれば、それもまったくクールです。
お手伝いありがとう!