all groups > dotnet general > june 2005 >
You're in the

dotnet general

group:

Compress Image


Compress Image Edward
6/30/2005 11:11:03 PM
dotnet general:
Thanks to Bob Powel (http://www.bobpowell.net/onebit.htm) I'm able to
compress an image. However, this method takes a long time to compress an
image. Does anyone know a quicker way? (The images I have to compress are
already in black and white).

Code used:
Bitmap bmpOrig =
(System.Drawing.Bitmap)Image.FromFile(OrigFileName).Clone();

Bitmap objConvImage = new Bitmap(bmpOrig.Width, bmpOrig.Height,
PixelFormat.Format1bppIndexed);
objConvImage.SetResolution(300,300);

BitmapData bmd = objConvImage.LockBits(new Rectangle(0, 0,
objConvImage.Width, objConvImage.Height),
ImageLockMode.ReadWrite, PixelFormat.Format1bppIndexed );

for(int y=0; y < bmpOrig.Height; y++)
{
for(int x=0; x < bmpOrig.Width; x++)
{
if(bmpOrig.GetPixel(x,y).GetBrightness()>0.5f)
SetIndexedPixel(x,y,bmd,true);
}
}
objConvImage.UnlockBits(bmd);
objConvImage.Save(FileName, _ImageCodecInfo, _ImageCodecParams);
objConvImage.Dispose();
bmpOrig.Dispose();

and the functions:
private static unsafe void SetIndexedPixel(int x, int y, BitmapData bmd,
bool pixel)
{
byte* p = (byte*)bmd.Scan0.ToPointer();
int index = y * bmd.Stride+(x>>3);
byte mask = (byte)(0x80>>(x&0x7));
if(pixel)
p[index]|=mask;

else
p[index]&=(byte)(mask^0xff);
}

private static ImageCodecInfo GetCodecInfo(string FileFormat)
{
ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
for (int j=0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == FileFormat)
return encoders[j];
}

return null;
Re: Compress Image Blackice
7/6/2005 6:44:01 PM

You can try this:

Bitmap bmp = new Bitmap(/*[input filename]*/);
bmp.Save(/*[output filename]*/, System.Drawing.Imaging.ImageFormat.Jpeg);

By changing the System.Drawing.Imaging.ImageFormat value, you can change
the type to convert to. Basically, all types other than BMP are lossy
Re: Compress Image C-Services Holland b.v.
7/7/2005 11:32:49 AM
[quoted text, click to view]

TIF isn't lossy neither is RGA and if the bitmap is already in 8bit
color, GIF isn't lossy either. I have no idea if .net supports any of
these formats though :)

--
Rinze van Huizen
Re: Compress Image Edward
7/7/2005 10:58:02 PM
I know that I can change the type this way. However, the saved imaged isn't
compressed. I want to compress the tiff image. It only holds black and white.

Edward

[quoted text, click to view]
AddThis Social Bookmark Button