读书人

为什么用Bit地图类生成的图片不能被C+

发布时间: 2013-07-01 12:33:04 作者: rapoo

为什么用Bitmap类生成的图片不能被C++程序 或PS识别?
public Bitmap SetResolution(Bitmap bitmap)
{
if ((bitmap.Height < 512) && (bitmap.Width < 1024))
{
return bitmap;
}
Rectangle rec = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
BitmapData bmpData = bitmap.LockBits(rec, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
IntPtr Scan0 = bmpData.Scan0;
int stride = bmpData.Stride;
int nWidth = bmpData.Width;
int nHeight = bmpData.Height;


int size = bitmap.Width / 512 - 1;
int width = nWidth / size;
int height = nHeight / size;
Bitmap z_Bitmap = new Bitmap(width, height);
Rectangle rec2 = new Rectangle(0, 0, z_Bitmap.Width, z_Bitmap.Height);
BitmapData bmpData2 = z_Bitmap.LockBits(rec2, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
IntPtr Scan02 = bmpData2.Scan0;
int nWidth2 = bmpData2.Width;
int nHeight2 = bmpData2.Height;
unsafe
{
byte* p = (byte*)(void*)Scan0;


byte* p2 = (byte*)(void*)Scan02;
for (int i = 0; i < nHeight2; i++)
{
for (int j = 0; j < nWidth2; j++)
{
p2[0] = p[0];
p2[1] = p[1];
p2[2] = p[2];
// p += 3;
p += size * 3;
p2 += 3;
}
p += stride - size * 3 * nWidth2;
p2 += bmpData2.Stride - nWidth2 * 3;

p += stride * (size - 1);

}
}
bitmap.UnlockBits(bmpData);
z_Bitmap.UnlockBits(bmpData2);
return z_Bitmap;


}

为什么变换后的图片保存后,PS不认为它是图片。而且在C++程序也不识别。 Bitmap 图片
[解决办法]

引用:
bmp格式的啊
openBitmap我先赋了值的
private void btnSave_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Bitmap文件(*.bmp)
[解决办法]
*.bmp
[解决办法]
Jpeg文件(*.jpg)
[解决办法]
*.jpg
[解决办法]
所有合适文件(*.bmp/*.jpg)
[解决办法]
*.bmp/*.jpg";
saveFileDialog.FilterIndex = 1;
saveFileDialog.RestoreDirectory = true;
if (DialogResult.OK == saveFileDialog.ShowDialog())
{
openBitmap.Save(saveFileDialog.FileName);
}
}

你这里就已经是错误的了,未指定保存格式,正确的应该如下写:
private void btnSave_Click(object sender, EventArgs e)
{
Bitmap openBitmap = null;
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Bitmap文件(*.bmp)
------解决方案--------------------


*.bmp
[解决办法]
Jpeg文件(*.jpg)
[解决办法]
*.jpg
[解决办法]
Png文件(*.png)
[解决办法]
*.png";
saveFileDialog.FilterIndex = 1;
saveFileDialog.RestoreDirectory = true;
if (DialogResult.OK == saveFileDialog.ShowDialog())
{
switch (saveFileDialog.FilterIndex)
{
case 2:
openBitmap.Save(saveFileDialog.FileName, ImageFormat.Jpeg);
break;
case 3:
openBitmap.Save(saveFileDialog.FileName, ImageFormat.Png);
break;
default:
openBitmap.Save(saveFileDialog.FileName, ImageFormat.Bmp);
break;
}
}
}

读书人网 >C#

热点推荐