社区
C#
帖子详情
GDI绘图的Color问题
chentank
2011-02-18 12:23:59
为什么我用GDI绘图,在绘图时只用了RGB(0,255,0) RGB(255,0,0) RGB(0,0,0) 三种色,可是绘出来的图保存为jpg 后再打开就出现很多种杂色了? 请问如何能保证不出现这三种色以外的色?
...全文
138
11
打赏
收藏
GDI绘图的Color问题
为什么我用GDI绘图,在绘图时只用了RGB(0,255,0) RGB(255,0,0) RGB(0,0,0) 三种色,可是绘出来的图保存为jpg 后再打开就出现很多种杂色了? 请问如何能保证不出现这三种色以外的色?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chentank
2011-02-19
打赏
举报
回复
搞定 [code=C] private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
[/code]
调用:
[code=C] System.Drawing.Imaging.Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
ImageCodecInfo myImageCodecInfo = ImageCodecInfo.GetImageEncoders()[0];
myEncoder = System.Drawing.Imaging.Encoder.Quality;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder, 95L);
myEncoderParameters.Param[0] = myEncoderParameter;//将构建出来的EncoderParameter类赋给EncoderParameters数组
myImageCodecInfo = GetEncoderInfo("image/jpeg");
bmp.Save(file,myImageCodecInfo,myEncoderParameters);
[/code]
人到中年琐事多
2011-02-18
打赏
举报
回复
JPG是有损压缩,保存的时候一般压缩率设置为8就可以了,太低图像失真
chentank
2011-02-18
打赏
举报
回复
bitmap.save 保存为jpg文件 然后再用代码检查打开后文件的每个像素,结果发现很多像素的色并不是我要的纯色,而是比如果(20,23,52) 之类的杂色
苦苦挣扎中
2011-02-18
打赏
举报
回复
保存的时候,你是怎么样保存的
贴图片很累吧,用《Csdn收音机》截图功能轻松解决!
chentank
2011-02-18
打赏
举报
回复
绘制在窗体上很正常~ 保存之后,再一个一个查像素,就发现出现很多杂色,而且保存之后再打开会觉得整体变暗
苦苦挣扎中
2011-02-18
打赏
举报
回复
应该不会出现才对,也许是保存的时候有问题,你可用先绘制到窗体上看看颜色
下载一次,就能不断自动更新,欢迎使用《Csdn收音机》!
苦苦挣扎中
2011-02-18
打赏
举报
回复
ImageCodecInfo ImageCodecInfo1 = null;
ImageCodecInfo[] encoders = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo imageCodecInfo in encoders)
{
if (imageCodecInfo.FormatDescription == "JPEG")
{
ImageCodecInfo1 = imageCodecInfo;
break;
}
}
EncoderParameters ep = new EncoderParameters(1);
ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 50L);
bitmap.Save(@"c:\2.jpg", ImageCodecInfo1, ep);
你这样用看看
使用《Csdn收音机》截图功能,轻松制作图文并茂的文章!
chentank
2011-02-18
打赏
举报
回复
不是很明白,这个不和Bitmap对象关联起来怎么起作用?
苦苦挣扎中
2011-02-18
打赏
举报
回复
Save的重载方法里应该有ImageCodecInfo,EncoderParameters的设置吧。可以通过
EncoderParameters eps = new EncoderParameters(1);
EncoderParameter ep = new EncoderParameter(enc, 90L);//质量等级90%
eps.Param[0] = ep;
来设置保存的质量等级。
回答问题要查资料?用《Csdn收音机》可以最快速度搞定!
chentank
2011-02-18
打赏
举报
回复
如何设置压缩率?
founderfang
2011-02-18
打赏
举报
回复
原来是压缩惹的祸。学习了。
图像特效专家 C#完整源代码!
GDI
Color
绘图
精品
完整的!可用的软件一套! 功能强大!专业级源代码编制! 各种图像参数视图(直方图,统计图)! 各种图像滤镜(超过50种,如
Color
,HSL
Color
space,YCbCr
Color
space,Binarization,Morphology,Convolution & Correlation……………… 等等,不一一列举)! 还包括:超帅VisualStudio多文档风格界面!打印页面设置,支持修改后新建,支持历史记录! 全部完整源代码!! 编译0 Error,0 Warning,直接运行! 无敌了!
一个简单的窗体交互
绘图
程序
一个简单的窗体交互
绘图
程序,实现添加设置
绘图
参数的菜单项和对话框。在设置对话框中,设置笔的种类、风格、粗细和颜色;设置刷的种类、填充样式、填充颜色、填充图片等 -Form a simple interactive drawing program, add the set graphics parameters to achieve the menu items and dialog box. In the settings dialog box, set the pen type, style, thickness and
color
set brush types, fill style, fill
color
, fill, photographs, and other
GDI
+开发包
GDI
+安装详解
Visual C++6.0使用
GDI
+的一般方法 1. 载解压
GDI
+开发包; 2. 正确设置include & lib 目录; 3. stdafx.h 添加: #ifndef ULONG_PTR #define ULONG_PTR unsigned long* #endif #include 或者 将Visual C++ 2005下的BaseTsd.h头文件(该文件已放入
GDI
+开发包的Include目录中)替换Visual C++ 6.0下的 BaseTsd.h头文件。然后: #include <basetsd.h> #include 或者 将Visual C++ 2005下的BaseTsd.h头文件(该文件已放入
GDI
+开发包的Include目录中)放入
GDI
+开发包的 Include目录中,并在VC6.0 中IDE中添加的包含文件的路径,且将其置前。(方法:工具-> 选项-> 目录 ,添 加lib和include
GDI
+所在路径,并把他们置前。) 然后: #include <basetsd.h> #include 4. 程序中添加
GDI
+的包含文件
gdi
plus.h以及附加的类库
gdi
plus.lib。 通常
gdi
plus.h包含文件添加在应用程序的stdafx.h文件中,而
gdi
plus.lib可用两种进行添加: 第一种是直接在stdafx.h文件中添加下列语句: #pragma comment( lib, "
gdi
plus.lib" ) 另一种方法是: 在VC6.0 中添加库文件在:工具-> 选项-> 目录 ,添加lib和include
GDI
+所在路径,并把他们置前 在VC.net中添加库文件在:项目菜单->属性->链接器->输入 举个例子: (1)在应用程序项目的应用类中,添加一个成员变量,如下列代码: ULONG_PTR m_
gdi
plusToken; 其中,ULONG_PTR是一个DWORD数据类型,该成员变量用来保存
GDI
+被初始化后在应用程序中的
GDI
+标识,以便能在应用程序退出后,引用该标识来调用
Gdi
plus::
Gdi
plusShutdown来关闭
GDI
+。 (2)在应用类中添加ExitInstance的重载,并添加下列代码用来关闭
GDI
+: int C
GDI
TestApp::ExitInstance() {
Gdi
plus::
Gdi
plusShutdown(m_
gdi
plusToken); return CWinApp::ExitInstance(); } (3)在应用类的InitInstance函数中添加
GDI
+的初始化代码: 注意:下面这些
GDI
+的初始化代码必须放在m_pMainWnd->UpdateWindow();之前。 CWinApp::InitInstance();
Gdi
plus::
Gdi
plusStartupInput
gdi
plusStartupInput;
Gdi
plus::
Gdi
plusStartup(&m_
gdi
plusToken, &
gdi
plusStartupInput;, NULL); (4)在需要
绘图
的窗口或视图类中添加
GDI
+的绘制代码。 下面分别就单文档和基于对话框应用程序为例,说明使用
GDI
+的一般过程和方法。 1. 在单文档应用程序中使用
GDI
+ 在上面的过程中,我们就是以一个单文档应用程序Ex_
GDI
Plus作为示例的。下面列出第4步所涉及的代码: void C
GDI
TestView::OnDraw(CDC* pDC) { C
GDI
TestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here usingnamespace
Gdi
plus; Graphics graphics(pDC->m_hDC); Pen newPen(
Color
(255,0,0),3); HatchBrush newBrush(HatchStyleCross,
Color
(255,0,255,0),
Color
(255,0,0,255));//创建一个填充画刷,前景色为绿色,背景色为蓝色 graphics.DrawRectangle(&newPen;,50,50,100,60);// 在(50,50)处绘制一个长为100,高为60的矩形 graphics.FillRectangle(&newBrush;,50,50,100,60); // 在(50,50)处填充一个长为100,高为60的矩形区域 } 2.第2个例子 #include #include //加了没有。 #include using namespace
Gdi
plus;//加了没有。 INT main() {
Gdi
plusStartupInput
gdi
plusStartupInput; ULONG_PTR
gdi
plusToken;
Gdi
plusStartup(&
gdi
plusToken;, &
gdi
plusStartupInput;, NULL);//加了没有。 Image* image = new Image(L "FakePhoto.jpg "); printf( "The width of the image is %u.\n ", image-> GetWidth()); printf( "The height of the image is %u.\n ", image-> GetHeight()); delete image;
Gdi
plusShutdown(
gdi
plusToken);//加了没有。 return 0; }
GDI
+库以及使用方法
Visual C++6.0使用
GDI
+的一般方法 1. 载解压
GDI
+开发包; 2. 正确设置include & lib 目录; 3. stdafx.h 添加: #ifndef ULONG_PTR #define ULONG_PTR unsigned long* #endif #include 4. 程序中添加
GDI
+的包含文件
gdi
plus.h以及附加的类库
gdi
plus.lib。 通常
gdi
plus.h包含文件添加在应用程序的stdafx.h文件中,而
gdi
plus.lib可用两种进行添加: 第一种是直接在stdafx.h文件中添加下列语句: #pragma comment( lib, "
gdi
plus.lib" ) 另一种方法是: 在VC.net中添加库文件在:项目菜单->属性->链接器->输入 举个例子: (1)在应用程序项目的应用类中,添加一个成员变量,如下列代码: ULONG_PTR m_
gdi
plusToken; 其中,ULONG_PTR是一个DWORD数据类型,该成员变量用来保存
GDI
+被初始化后在应用程序中的
GDI
+标识,以便能在应用程序退出后,引用该标识来调用
Gdi
plus::
Gdi
plusShutdown来关闭
GDI
+。 (2)在应用类中添加ExitInstance的重载,并添加下列代码用来关闭
GDI
+: int C
GDI
TestApp::ExitInstance() {
Gdi
plus::
Gdi
plusShutdown(m_
gdi
plusToken); return CWinApp::ExitInstance(); } (3)在应用类的InitInstance函数中添加
GDI
+的初始化代码: 注意:下面这些
GDI
+的初始化代码必须放在m_pMainWnd->UpdateWindow();之前。 CWinApp::InitInstance();
Gdi
plus::
Gdi
plusStartupInput
gdi
plusStartupInput;
Gdi
plus::
Gdi
plusStartup(&m_
gdi
plusToken, &
gdi
plusStartupInput, NULL); (4)在需要
绘图
的窗口或视图类中添加
GDI
+的绘制代码。 下面分别就单文档和基于对话框应用程序为例,说明使用
GDI
+的一般过程和方法。 1. 在单文档应用程序中使用
GDI
+ 在上面的过程中,我们就是以一个单文档应用程序Ex_
GDI
Plus作为示例的。下面列出第4步所涉及的代码: void C
GDI
TestView::OnDraw(CDC* pDC) { C
GDI
TestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here usingnamespace
Gdi
plus; Graphics graphics(pDC->m_hDC); Pen newPen(
Color
(255,0,0),3); HatchBrush newBrush(HatchStyleCross,
Color
(255,0,255,0),
Color
(255,0,0,255));//创建一个填充画刷,前景色为绿色,背景色为蓝色 graphics.DrawRectangle(&newPen,50,50,100,60);// 在(50,50)处绘制一个长为100,高为60的矩形 graphics.FillRectangle(&newBrush,50,50,100,60); // 在(50,50)处填充一个长为100,高为60的矩形区域 } 编译并运行,结果如图:
GDI
+ 绘制文字自动换行
/// /// 绘制文字自动换行 /// ///
绘图
图面 /// 绘制文本 /// 绘制字体 /// 字体颜色 /// 最大宽度,达到最大宽度则换行 /// 起始坐标 /// 段落高度间隔 /// 字体间隔
C#
110,539
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章