Resize Multipage Tiff


{









{
srcBmp.SelectActiveFrame(




System.Runtime.InteropServices.
tempBmp.UnlockBits(tempBmd);


imageSize = destBmd.Stride * destBmd.Height;

destPage = GetBWPage(tempBmp, tempBmd, tempBuffer, destPage, destBmd, destBuffer, imageSize);

{
destFile = destPage;
destFile.Save(destPath, ici, ep);
}
private void ResaveTiffBlackWhite(string sourcePath, string destPath)FileStream fs = File.Open(sourcePath, FileMode.Open, FileAccess.Read);Bitmap srcBmp = (Bitmap)Bitmap.FromStream(fs);int totalPages = Convert.ToInt32(srcBmp.GetFrameCount(FrameDimension.Page) - 1);ImageCodecInfo ici = GetTiffCodec();EncoderParameters ep = GetBWEncoderParams();double resizeRatio = 1.0;Bitmap destFile = null;for (int currentPage = 0; currentPage <= totalPages; currentPage++)FrameDimension.Page, currentPage);Bitmap tempBmp = GetRGBPage(srcBmp, resizeRatio);BitmapData tempBmd = tempBmp.LockBits(new Rectangle(0, 0, tempBmp.Width, tempBmp.Height), ImageLockMode.ReadOnly, tempBmp.PixelFormat);int imageSize = tempBmd.Stride * tempBmd.Height;byte[] tempBuffer = new byte[imageSize + 1];Marshal.Copy(tempBmd.Scan0, tempBuffer, 0, imageSize);Bitmap destPage = new Bitmap(tempBmp.Width, tempBmp.Height, PixelFormat.Format1bppIndexed);BitmapData destBmd = destPage.LockBits(new Rectangle(0, 0, destPage.Width, destPage.Height), ImageLockMode.WriteOnly, PixelFormat.Format1bppIndexed);byte[] destBuffer = new byte[imageSize + 1];if (currentPage == 0)else{
ep.Param[0] =
destFile.SaveAdd(destPage, ep);
}

{
ep.Param[0] =
destFile.SaveAdd(ep);
}
}
}

{

{

{

}
}

}

{

ep.Param[0] =
ep.Param[1] =
ep.Param[2] =

}

{


g.DrawImage(srcBmp,
g.Dispose();

}

{







{
srcIndex = y * srcBitmapData.Stride;
destIndex = y * destBitmapData.Stride;
destValue = 0;
pixValue = 128;

{
pixTotal = srcBuffer[srcIndex + 2];
pixTotal += srcBuffer[srcIndex + 2];
pixTotal += srcBuffer[srcIndex + 3];

{
destValue +=
}

{
destBuffer[destIndex] = destValue;
destIndex += 1;
destValue = 0;
pixValue = 128;
}
new EncoderParameter(Encoder.SaveFlag, Convert.ToInt64(EncoderValue.FrameDimensionPage));if (currentPage == Convert.ToInt32(srcBmp.GetFrameCount(FrameDimension.Page) - 1))new EncoderParameter(Encoder.SaveFlag, Convert.ToInt64(EncoderValue.Flush));private ImageCodecInfo GetTiffCodec()foreach (ImageCodecInfo ici in ImageCodecInfo.GetImageEncoders())if (ici.MimeType == "image/tiff")return ici;return null;private EncoderParameters GetBWEncoderParams()EncoderParameters ep = new EncoderParameters(3);new EncoderParameter(Encoder.SaveFlag, Convert.ToInt64(EncoderValue.MultiFrame));new EncoderParameter(Encoder.Compression, Convert.ToInt64(EncoderValue.CompressionCCITT4));new EncoderParameter(Encoder.ColorDepth, 1);return ep;private Bitmap GetRGBPage(Bitmap srcBmp, double resizeRatio)Bitmap tempBmp = new Bitmap(Convert.ToInt32(resizeRatio * srcBmp.Width), Convert.ToInt32(resizeRatio * srcBmp.Height), PixelFormat.Format32bppArgb);Graphics g = Graphics.FromImage(tempBmp);new Rectangle(0, 0, tempBmp.Width, tempBmp.Height), 0, 0, srcBmp.Width, srcBmp.Height, GraphicsUnit.Pixel);return tempBmp;private Bitmap GetBWPage(Bitmap srcBitmap, BitmapData srcBitmapData, byte[] srcBuffer, Bitmap destBitmap, BitmapData destBitmapData, byte[] destBuffer, int imageSize)int srcIndex = 0;int destIndex = 0;int pixTotal = 0;byte destValue = 0;byte pixValue = 0;int thresh = 600;for (int y = 0; y <= srcBitmap.Height - 1; y++)for (int x = 0; x <= srcBitmap.Width - 1; x++)if (pixTotal > thresh)Convert.ToByte(pixValue);if (pixValue == 1)else{
pixValue >>= 1;
}
srcIndex += 4;
}

{
destBuffer[destIndex] = destValue;
}
}
System.Runtime.InteropServices.
destBitmap.UnlockBits(destBitmapData);

}




if (pixValue != 128)Marshal.Copy(destBuffer, 0, destBitmapData.Scan0, imageSize);return destBitmap;/// <summary>/// /////////// </summary>/// <param name="imgBitmap"></param>
{
private void blacknwhite(Image imgBitmap)try{



{

{
c = img.GetPixel(i, j);

r =

g =

b =


{
r = 255;
g = 255;
b = 255;
}
Bitmap img = new Bitmap(imgBitmap);Color c;for (int i = 0; i < img.Width; i++)for (int j = 0; j < img.Height; j++)int r = 0;Convert.ToInt16(c.R);int g = 0;Convert.ToInt16(c.G);int b = 0;Convert.ToInt16(c.B);int ans = (r + g + b) / 3;if (ans > 128)else{
r = 0;
g = 0;
b = 0;
}
c =
img.SetPixel(i, j, c);
}
}
imgBitmap = img;
}

{

}
}
Color.FromArgb(r, g, b);catch (Exception ex)MessageBox.Show(ex.Message);

Comments