C#Bitmap保存一直提示GDI中发生一般性错误

johopig 2019-03-13 11:48:20
...全文
2016 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
平底锅锅锅 2019-03-18
  • 打赏
  • 举报
回复
图片格式改成其它的试试,也有可能图片有问题。
還是 2019-03-15
  • 打赏
  • 举报
回复
百度一份可用的代码不行吗,非要自己写? 代码中没有类似保存图片的代码吗,拿过来用就可以了。 自己先写一个小例子试一下,可以了在合并到代码中。 这个可以屏蔽其他的问题
stherix 2019-03-14
  • 打赏
  • 举报
回复
路径可能有问题,而且image名字和文件夹也是同名的,这不行 你试下@"D:\image.jpg"
johopig 2019-03-14
  • 打赏
  • 举报
回复
引用 1 楼 hztltgg 的回复:
save里写了个目录?需要一个文件名吧
已经写了文件名了,后来C盘目录下也有image这个文件夹,但是还是提示GDI发生一般性错误
hztltgg 2019-03-14
  • 打赏
  • 举报
回复
save里写了个目录?需要一个文件名吧
johopig 2019-03-14
  • 打赏
  • 举报
回复
谢谢上面帮助过的人,分有点少。。。谢谢你们哈~ 原来Save填写的路径必须存在,如果不确定是否存在可以先判断是否存在文件夹,然后再在这个文件夹里判断是否存在这个图片
                if (!System.IO.Directory.Exists(@"C:\\Users\\卢本伟\\Desktop\\Test\\Test\\image"))
                {
                    System.IO.Directory.CreateDirectory(@"C:\\Users\\卢本伟\\Desktop\\Test\\Test\\image");//不存在就创建文件夹 } 
                    //判断某文件是否存在 
                    if (File.Exists(@"C:\\Users\\卢本伟\\Desktop\\Test\\Test\\image" + name + ".png"))
                    {
                        return name;
                    }
                    else
                    {
                        image.Save("C:\\Users\\卢本伟\\Desktop\\Test\\Test\\image\\" + name + ".png", System.Drawing.Imaging.ImageFormat.Png);
                        return name;
                    }
                }
Save的话名称中不能包含目录,还要写好名称,记得写后缀,这里一直忘记给它写文件名了,只写到目录。。。。
johopig 2019-03-14
  • 打赏
  • 举报
回复
引用 24 楼 智者知已应修善业 的回复:
System.Drawing.Bitmap 图区 = new System.Drawing.Bitmap(100, 100); 图区.Save("d:\\ddddddddd.Bmp", System.Drawing.Imaging.ImageFormat.Bmp);
嗯嗯可以了谢谢你哈~
  • 打赏
  • 举报
回复
System.Drawing.Bitmap 图区 = new System.Drawing.Bitmap(100, 100);
图区.Save("d:\\ddddddddd.Bmp", System.Drawing.Imaging.ImageFormat.Bmp);
johopig 2019-03-14
  • 打赏
  • 举报
回复
引用 22 楼 智者知已应修善业 的回复:
System.Drawing.Bitmap 图区 = new System.Drawing.Bitmap(100, 100); 图区.Save("d:\\ddddddddd", System.Drawing.Imaging.ImageFormat.Bmp); 这样测试是可以的。
可以是可以了,但是这个Save不是保存到这个字符串的文件的目录下吗,为什么会不行,还有现在Save下来的图片都是这样的,需要手动改后缀名之后才能看到图片。。
  • 打赏
  • 举报
回复
System.Drawing.Bitmap 图区 = new System.Drawing.Bitmap(100, 100);
图区.Save("d:\\ddddddddd", System.Drawing.Imaging.ImageFormat.Bmp);
这样测试是可以的。
  • 打赏
  • 举报
回复
image.Save("C:\\imimim");这样试看,名称中含目录是不行的.
johopig 2019-03-14
  • 打赏
  • 举报
回复
引用 16 楼 hztltgg 的回复:
你说的C盘根目录下有image目录,然后又写c:\image也是有问题的,那个需要文件名,你存在一个目录了
我把它改为image.Save("C:\\im\\");之后还是不行。。。
johopig 2019-03-14
  • 打赏
  • 举报
回复
引用 18 楼 hztltgg 的回复:
如果文件夹不存在,save方法也是不能自动建文件夹的,需要事先建好
我在C盘右键只有一个文件夹可以新建,那现在就是没有权限创建文件夹是吗,那要怎么搞。。。
hztltgg 2019-03-14
  • 打赏
  • 举报
回复
如果文件夹不存在,save方法也是不能自动建文件夹的,需要事先建好
  • 打赏
  • 举报
回复
你试看加载一个图像上去看。
hztltgg 2019-03-14
  • 打赏
  • 举报
回复
你说的C盘根目录下有image目录,然后又写c:\image也是有问题的,那个需要文件名,你存在一个目录了
hztltgg 2019-03-14
  • 打赏
  • 举报
回复
试了代码,扩展名不写不是关键,生成的没有扩展名而已。你这个应该就是根目录下没有权限写文件,这个操作系统默认就这样了,你可以看看在C盘右键新建里面是不是只有文件夹,没有其他的。
johopig 2019-03-14
  • 打赏
  • 举报
回复
引用 13 楼 胖叔叔写代码 的回复:
管理员模式运行vs调试看看能行不?
还是不行。。。我服了
  • 打赏
  • 举报
回复
管理员模式运行vs调试看看能行不?
johopig 2019-03-14
  • 打赏
  • 举报
回复
引用 9 楼 hztltgg 的回复:
简化你的代码,去掉其他的,只保存图片看看出错吗?
还是会。。。
加载更多回复(8)
class CSBitmap //Bitmap类,特点紧约型数据结构,GetPixel效率高,放弃调色板,自动支持4种色深,特有的12位颜色更接近人眼可识别颜色数目;有多种缩放,色深转换,拷贝,剪切,和hBitmap转换,显示等功能;支持串行化。支持1,12,24,32位位图,对应适用于所有函数,相比于HBitmap和CSBitmap对象要简单,可直接操作数据区;同时可用于1,4,8,12,16,24,32位二维数列的储存,部分基本函数(GetPixel,SetPixel)支持; { public: CSBitmap(void); ~CSBitmap(void); unsigned int Width; //Bitmap的宽 unsigned int Height; //Bitmap的高 DWORD BitSize; //Bitmap的数据区大小(字节) BYTE* pBitData; //Bitmap的数据区指针 unsigned int BitCount; //Bitmap的色深 bool SetAttribute(unsigned int mWidth=NULL, unsigned int mHeight=NULL, unsigned int mBitCount=NULL); //设置Bitmap的属性,Bitmap会被清除 mWidth Bitmap的宽度,为NULL则不改变 mHeight Bitmap的高度,为NULL则不改变 mBitCount Bitmap的色深,为NULL则不改变 bool ImportBits(BYTE* lpBits, int mBitSize=NULL); //拷贝Bits数据进对象数据区 lpBits 拷贝数据的指针 mBitSize 拷贝数据的字节数 COLORREF GetPixel(unsigned int x, unsigned int y); //获得某点的原始数值,当为12,24,32位数时,则为RGB值 X,y 需要获取点的坐标 bool SetPixel(unsigned int x, unsigned int y, COLORREF clr); //获得某点的原始数值,当为12,24,32位数时,则为RGB值 X,y 需要设置点的坐标 bool StretchDIB(CSBitmap* DestBmp, unsigned int mWidth, unsigned int mHeight, unsigned int mFlag=0); //缩放 DestBmp用于获取缩放后图片的指针 mWidth, mHeight缩放后大小 mFlag缩放算法 取值 算法 缩小 放大 0 逆向寻点算法 效率高,质量一般 效率高,质量 1 双线性补点 效率低,质量一般 效率低,质量高 2 平均值算法 效率低,质量好 效率高,质量差 static BYTE GetRValue12(COLORREF Clr12Bit); static BYTE GetGValue12(COLORREF Clr12Bit); static BYTE GetBValue12(COLORREF Clr12Bit); //用于12位图的获取RGB分量,24位图,32位图的COLOR分离请用GDI的GetPixel() Clr12Bit 对12位图GetPixel获得的原始值 static COLORREF RGB12(BYTE R, BYTE G, BYTE B); //用于12位图的RGB合成,24位图,32位图的COLOR合成请用GDI的RGB() static COLORREF Color24To1(COLORREF Color24); //24位色深COLORREF转1位色深(黑白)值 static COLORREF Color24To12(COLORREF Color24); //24位色深COLORREF转12位色深值 static COLORREF Color1To24(COLORREF Color2); //1位色深COLORREF转24位,32位色深(黑白)值 static COLORREF Color12To24(COLORREF Color12); //12位色深COLORREF转24位,32位色深(黑白)值 bool ConvertTo1Bit(CSBitmap* DestBmp); //12,24,36位图片转换成1位色深图 DestBmp用于接收数据的DestBmp指针,转换过程包括自动参数重置 bool ConvertTo12Bit(CSBitmap* DestBmp); //1,24,36位图片转换成12位色深图 DestBmp用于接收数据的DestBmp指针,转换过程包括自动参数重置 bool ConvertTo24Bit(CSBitmap* DestBmp); //1,12,36位图片转换成24位色深图 DestBmp用于接收数据的DestBmp指针,转换过程包括自动参数重置 bool FromHandle(HBITMAP hBitmap); //从HBITMAP获得CSBitmap对象 bool CopyPaste(CSBitmap* DestBmp, unsigned int x, unsigned int y); //复制本CSBitmap至另一DestBmp的指定位置 DestBmp 目标,对象 X,y复制后图片左上角位置 bool PaintDIB(CDC* dcDest, int x,int y,unsigned int mWidth, unsigned int mHeight); //把本图片显示至CDC对象上,支持1,12,24,26位图 dcDest 目标dc(兼容DC) x,y 拷贝到dc上的位置 mWidth,mHeight拷贝后的大小 const CSBitmap& operator=(const CSBitmap &SBmp); }; //重载了 = 赋值操作符
C#完整教程以下是目录: 第一章 C#语言基础 5 1.1 C#语言特点 5 1.2 编写控制台应用程序 6 1.3 类的基本概念 10 1.4 C#的数据类型 13 1.5 运算符 20 1.6 程序控制语句 23 1.7 类的继承 26 1.8 类的成员 28 1.9 类的字段和属性 28 1.10 类的方法 30 1.11 类的多态性 36 1.12 抽象类和抽象方法 38 1.13 密封类和密封方法 39 1.14 接口 39 1.15 代表 42 1.16 事件 43 1.17 索引指示器 44 1.18 名字空间 45 1.19 非安全代码 46 习题 47 第二章 Windows编程的基础知识 48 2.1 窗口 48 2.2 Windows的消息系统 48 2.3 Windows编程接口和类库 49 2.4 Windows应用程序的基本结构 50 习题 57 第三章 常用控件和类的使用 58 3.1 控件通用属性 58 3.2 Form类 58 3.3 标签(Label)控件 59 3.4 按钮(Button)控件 60 3.5 事件处理函数的参数 60 3.6 文本框(TextBox)控件 61 3.7 Convert类 62 3.8 单选按钮(RadioButton)和GroupBox控件 62 3.9 Font类 63 3.10 多选框(CheckBox)控件 63 3.11 列表选择控件(ListBox) 65 3.12 下拉列表组合框(ComboBox)控件 66 3.13 ToolTip控件 66 3.14 超级链接(LinkLable)控件 67 3.15 定时(Timer)控件 67 3.16 DateTime类 68 3.17 菜单 69 3.18 工具条 70 3.19 状态栏(StatusBar)控件 72 3.20 鼠标事件 73 3.21 快捷菜单(ContextMenu) 74 3.22 综合例子:计算器 75 习题: 77 第四章 文本编辑器的实现 79 4.1 用RichTextBox控件实现文本编辑器 79 4.2 实现文本编辑器的剪贴板功能 80 4.3 实现文本编辑器的存取文件功能 80 4.4 修改字体属性 83 4.5 实现About对话框 84 4.6 实现文本编辑器查找替换功能 85 4.7 提示用户保存修改的文件 88 4.8 打印和打印预览 90 4.9 编写多文档界面应用程序 94 习题 100 第五章 图形图像编程 102 5.1 图形设备环境接口(GDI) 102 5.2 Graphics类 102 5.3 GDI+三种坐标系统: 103 5.4 GDI+常用的结构 104 5.5 画笔 105 5.6 创建画刷 106 5.7 基本图形的绘制和填充 110 5.8 Matrix类和图形的平移、变形、旋转 122 5.9 图形文件格式 124 5.10 图形框PictureBox控件 125 5.11 Bitmap类 126 5.12 图像剪贴板功能 130 5.13 图像的处理 133 习题 136 第六章 文件和流 137 6.1 用流读写文件 137 6.2 File类和FileInfo类 138 6.3 Directory类和DirectoryInfo类 140 6.4 例子:查找文件 143 6.5 例子:拆分和合并文件 144 习题: 145 第七章 多线程程序设计 146 7.1 线程类(Thread)的属性和方法 146 7.2 线程的创建 147 7.3 建立线程类 148 7.4 线程的优先级 149 7.5 多个线程互斥 150 7.6 Monitor类 151 7.7 线程的同步:生产者和消费者关系 151 习题: 153 第八章 ADO.NET与数据操作 154 8.1 数据库基本概念 154 8.2 设计连接和不连接数据库应用程序的基本步骤: 154 8.3 用ACCESS创建数据库 155 8.4 结构化查询语言SQL 157 8.5 用Connection对象连接数据库。 158 8.6 Command对象 158 8.7 DataAdapter对象 159 8.8 DataSet对象 160 8.9 用DataGraid控件显示数据和数据绑定 162 8.10 不连接数据库应用程序的完整的例子 162 8.11 修改数据并保存修改的数据到源数据库 163 8.12 其它数据绑定控件 164 8.13 建立主从关系表 165 第九章 ASP.Net编程基础知识 167 9.1 网络基础 167 9.2 HTML标记语言 171 9.3 ASP.NET技术基础 181 第十章 Web服务器端控件 188 10.1 常用的ASP.NET服务器端控件 188 10.2 ASP.Net控件数据绑定 192 10.3 数据验证控件 209 10.4 DataGraid控件 219 10.5 AdRotator控件 235 10.6 Calender控件 236 10.7 Visual Studio.Net实现留言板 239 第十一章 ASP.NET内建对象 242 11.1 Request对象 242 11.2 Response对象 244 11.3 Cookie对象 246 11.4 Application对象 250 11.5 Session对象 253 11.6 Server 对象 257 习题 258 第十二章 可扩展标记语言 259 12.1 HTML及其缺点 259 12.2 SGML(标准通用置标语言) 259 12.3 XML(可扩展置标语言) 259 12.4 XML的文档格式 260 12.5 用XSL文件显示XML文档 261 12.6 .NET对XML的支持 265 12.7 ADO.NET和XML 268 12.8 使用Visual Studio.Net建立和显示XML文档 271 第十三章 Web服务 273 13.1 Web服务的概念和用途 273 13.2 建立Web服务 274 13.3 基于.Net的Web服务客户端程序 277 13.4 建立Web服务客户端程序一般方法 280 13.5 发布和发现Web服务 281

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧