C#将wbmp格式图片转为jpg的图片。给个能直接用的方法加100分。具体代码如下:
添加引用
using System.IO;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
添加一个openFileDialog1,一个saveFileDialog1和一个pictureBox1,执行函数后显示图像并保存
private void openWBmp()
{
this.openFileDialog1.Filter = "Wbmp Files(*.wbmp)|*.wbmp";
if (this.openFileDialog1.ShowDialog()== DialogResult.OK)
{
byte[] datas = File.ReadAllBytes(this.openFileDialog1.FileName);
byte tmp;
int width=0, height=0,offset=2;
do
{
tmp = datas[offset++];
width = (width << 7) | (tmp & 0x7f);
} while ((tmp & 0x80) != 0);
do
{
tmp = datas[offset++];
height = (height << 7) | (tmp & 0x7f);
} while ((tmp & 0x80) != 0);
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
BitmapData bd = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, bmp.PixelFormat);
int stride=(width+7)>>3;
byte[] tmpdata = new byte[height * width];
for (int i = 0; i < height;i++ )
{
int pos = stride*i;
byte mask = 0x80;
for (int j = 0; j < width;j++ )
{
if ((datas[offset + pos] & mask )== 0)
tmpdata[i*width+j] = 0;
else
tmpdata[i*width+j] = 0xff;
mask >>= 1;
if (mask == 0)
{
mask = 0x80;
pos++;
}
}
}
System.Runtime.InteropServices.Marshal.Copy(tmpdata, 0, bd.Scan0, tmpdata.Length);
bmp.UnlockBits(bd);
this.pictureBox1.Image = bmp;
this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
if (this.saveFileDialog1.ShowDialog()== DialogResult.OK)
{
bmp.Save(this.saveFileDialog1.FileName);
}
}
}