PDA

View Full Version : سوال: تبدیل jpg به tiff با استفاده از کتابخانه libtiff



zhr.rezae66i
دوشنبه 08 تیر 1394, 12:34 عصر
سلام
من میخام یک فایل jpg را به tif تبدیل کنم.
با استفاده از libtiff
این انجام میشه و فایل رو درست میسازه
اما وقتی فایل tiff رو با استفاده از kdtele fax میفرستم
فایلی که خروجیه رنگ مشکی و سفیدش بجای هم چاپ میشه

کسی کار کرده بمن راهنمایی کنه

اینم کدش public static byte[] GetTiffImageBytes(Bitmap img, bool byScanlines)
{
try
{
byte[] raster = GetImageRasterBytes(img);

using (MemoryStream ms = new MemoryStream())
{
using (Tiff tif = Tiff.ClientOpen("InMemory", "w", ms, new TiffStream()))
{
if (tif == null)
return null;
tif.SetField(TiffTag.IMAGEWIDTH, img.Width);
tif.SetField(TiffTag.IMAGELENGTH, img.Height);
tif.SetField(TiffTag.COMPRESSION, Compression.CCITTFAX4);
tif.SetField(TiffTag.PHOTOMETRIC, Photometric.MINISBLACK);

tif.SetField(TiffTag.ROWSPERSTRIP, img.Height);
tif.SetField(TiffTag.XRESOLUTION,200);
tif.SetField(TiffTag.YRESOLUTION,200);

tif.SetField(TiffTag.SUBFILETYPE, 0);
tif.SetField(TiffTag.BITSPERSAMPLE, 1);
tif.SetField(TiffTag.FILLORDER, FillOrder.MSB2LSB);
tif.SetField(TiffTag.ORIENTATION, Orientation.TOPLEFT);

tif.SetField(TiffTag.SAMPLESPERPIXEL, 1);
tif.SetField(TiffTag.T6OPTIONS, 0);
tif.SetField(TiffTag.RESOLUTIONUNIT, ResUnit.INCH);
tif.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);

int tiffStride = tif.ScanlineSize();
int stride = raster.Length / img.Height;

if (byScanlines)
{
for (int i = 0, offset = 0; i < img.Height; i++)
{
bool res = tif.WriteScanline(raster, offset, i, 0);
if (!res)
return null;

offset += stride;
}
}
else
{
if (tiffStride < stride)
{
byte[] stripBits = new byte[tiffStride * img.Height];
for (int i = 0, rasterPos = 0, stripPos = 0; i < img.Height; i++)
{
System.Buffer.BlockCopy(raster, rasterPos, stripBits, stripPos, tiffStride);
rasterPos += stride;
stripPos += tiffStride;
}
int n = tif.WriteEncodedStrip(0, stripBits, stripBits.Length);
if (n <= 0)
return null;
}
else
{
int n = tif.WriteEncodedStrip(0, raster, raster.Length);
if (n <= 0)
return null;
}
}
}

return ms.GetBuffer();
}
}
catch (Exception)
{
return null;
}
}

zhr.rezae66i
چهارشنبه 10 تیر 1394, 13:43 عصر
مشکل رو فهمیدم

tif.SetField(TiffTag.COMPRESSION, Compression.CCITTFAX4);
باید بشه

tif.SetField(TiffTag.COMPRESSION, Compression.none);