我正在制作一个中值滤波器,问题是操纵像素只能在中Bitmap.后来我想在一个PictureBox使用中显示结果Image.我无法找到解决这个问题的方法......我唯一想到的就是使用Stream但不知道怎么做.帮助将受到约束〜
private void toolStripPerformMedian_Click(object sender, EventArgs e)
{
var filtered = Filters.MedianFilter(new Bitmap(_activeImageFile), 3);
var n = Image.FromStream() //How to do this?
}
Run Code Online (Sandbox Code Playgroud) 我正在研究一个基本的绘图应用程序.我希望用户能够保存图像的内容.

我以为我应该用
System.Drawing.Drawing2D.GraphicsState img = drawRegion.CreateGraphics().Save();
Run Code Online (Sandbox Code Playgroud)
但这对我保存到文件没有帮助.
我有一些库"自定义控件".基本上我们有自己的按钮,圆角板和一些带有一些定制油漆的组合箱.尽管OnPaint方法中存在"数学",但控件非常标准.大多数情况下,我们所做的只是绘制圆角并为背景添加渐变.我们使用GDI +来实现这一切.
这些控件都可以(根据我们的客户非常好看),但是尽管有DoubleBuffer,你可以看到一些重绘,特别是当同一个表格上有20个++按钮时(例如).在表单加载时,您会看到绘制的按钮...这很烦人.
我很确定我们的按钮不是地球上最快的东西,但我的问题是:如果双缓冲区"打开",那么不应该在后台进行所有重绘,而Windows子系统应该"立即"显示结果吗?
另一方面,如果存在将创建标签的"复杂"foreach循环,则将它们添加到面板(双缓冲)并更改其属性,如果我们在循环之前挂起面板并在循环时恢复面板布局结束,不应该所有这些控件(标签和按钮)"几乎立即"出现?这不会发生这种情况,您可以看到面板被填充.
知道为什么不发生这种情况吗?我知道很难在没有示例代码的情况下进行评估,但这也难以复制.我可以用相机制作一个视频,但相信我这个,它不是很快:)
这不是一个四舍五入的问题.差异~5 +像素.
测试用例字符串:""MACD(26,12,9)-0.000016"
e.Graphics.MeasureString("MACD (26,12,9) -0.000016", SystemFonts.DefaultFont).Width)
TextRenderer.MeasureText("MACD (26,12,9) -0.000016", SystemFonts.DefaultFont).Width)
Run Code Online (Sandbox Code Playgroud)
结果总是:
139.3942
134
Run Code Online (Sandbox Code Playgroud)
为什么尺寸差异如此之大?我只需要在外面绘制圆形宽度的方法.但它应该与MeasureString匹配,反之亦然.
我正在考虑将我的c#应用程序从使用自定义GDI +绘制控件迁移到带有自定义控件等的WPF应用程序.我想知道涉及的内容和期望的内容.
人们可以推荐哪些资源可能会有所帮助吗?或者确实任何可能有益的个人经历?
我正在使用StretchImage,因为该框可以使用分割器调整大小.看起来默认是某种平滑的双线性滤波,导致我的图像模糊并具有莫尔条纹.
我正在尝试创建一个透明背景的图像,以显示在网页上.
我尝试了几种技术,但背景总是黑色的.
如何创建透明图像然后在其上绘制一些线条?
我想将现有颜色变暗以用于渐变画笔.请问有人告诉我该怎么做?
C#,.net 2.0,GDI +
Color AdjustBrightness(Color c1, float factor)
{
float r = ((c1.R * factor) > 255) ? 255 : (c1.R * factor);
float g = ((c1.G * factor) > 255) ? 255 : (c1.G * factor);
float b = ((c1.B * factor) > 255) ? 255 : (c1.B * factor);
Color c = Color.FromArgb(c1.A,(int)r, (int)g, (int)b);
return c ;
}
Run Code Online (Sandbox Code Playgroud) 例外:
GDI +中发生了一般错误.System.Drawing.Image.Save(String filename)的System.Drawing.Image.Save(String filename,ImageCodecInfo encoder,EncoderParameters encoderParams)at System.Drawing.Image.Save(String filename,ImageFormat format)at System.Drawing.Image.Save(String filename)
码:
byte[] bitmapData = new byte[imageText.Length];
MemoryStream streamBitmap;
bitmapData = Convert.FromBase64String(imageText);
streamBitmap = new MemoryStream(bitmapData);
System.Drawing.Image img = Image.FromStream(streamBitmap);
img.Save(path);
Run Code Online (Sandbox Code Playgroud)
我们将base64字符串转换为MemoryStream,然后创建System.Drawing.Image(Image.FromStream(streamBitmap)).最后,图像保存在临时文件中.
奇怪的是,当Web服务器上的活动(并发用户数)很高并且问题在IISRESET或应用程序池回收后暂时解决时,问题似乎发生了......
==>垃圾收集器问题?
我已经检查了TEMP文件夹的权限......
我的代码枚举了一个元文件:
private void Parse()
{
Graphics graphics = Graphics.FromHwnd(IntPtr.Zero);
PointF pointf = new PointF();
graphics.EnumerateMetafile(_metafile, pointf, ParseCallback);
}
private bool ParseCallback(EmfPlusRecordType recordType,
int flags, int dataSize, IntPtr data, PlayRecordCallback callbackData)
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
我的开发机器是VirtualBoxUbuntu主机上的Windows 7 客户机.
用来工作正常的代码.但是,当我关闭Aero时,代码停止工作:ParseCallback永远不会被调用.
只有当我重新打开Aero时,ParseCallback才会再次执行.
为什么以及如何使此代码在非启用Aero的计算机上运行?
c# ×10
gdi+ ×10
winforms ×4
.net ×2
asp.net ×2
image ×2
performance ×1
picturebox ×1
save ×1
wpf ×1