首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

为什么用Bit地图类生成的图片不能被C++程序 或PS识别

2013-07-01 
为什么用Bitmap类生成的图片不能被C++程序 或PS识别?public Bitmap SetResolution(Bitmap bitmap){if ((bi

为什么用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;
        }                
    }
}

热点排行