PHP。如何在另一个图像上绘制一个图像?
我正在使用php&gd库. 我想绘制一个图像(说:)如何使用PHP和GD库进行操作. 解决方案 imagecopy()或imagecopymerge().它的文档也带来了榜样. 其他解决方案 imagecopyresampled()或imagecopyresized()应该完全做您想要的. (尽管它的名称,ImageCopyRespled也确实调整了大小.) 他们将一些或全部源图像进行调整大小,然后将其复制到目标图像中. 如果源图像不是正方形的,则可以在复制时裁剪或扭​​曲.
0 2023-05-27
编程技术问答社区
使用gdi+的x64应用程序:对性能有什么影响?
我目前正在实施一个使用GDI+进行服务器端渲染的ASP.NET应用程序.第一个版本取决于32位未托管的组件,因此所有托管组件均用于X86平台.最后,我摆脱了这种依赖性,现在可以将目标平台设置为AnyCPU.由于该应用程序可能可用于处理大量数据,因此能够以64位运行它可能很有用.但是,我读到在X64平台上使用GDI+时的性能下降,但无法获得有关它的详细信息. 我应该知道哪些绩效问题,以便知道是否在64位中运行值得绩效成本? 解决方案 好吧,我的信息错误:分析了针对X86和X64编译的GDI+应用程序后,每个平台的性能似乎相同.我不记得我先读到哪里,但这很好地提醒了"在看到Moto之前什么都没有假设". 对我的问题有明确的答案是很好的!
0 2023-05-24
编程技术问答社区
不安全的每像素访问,1756000像素的30ms访问
因此,我在网站上关于上述主题标题的一些想法有关快速,不安全的像素访问.一位先生们给了我一个粗略的例子,说明了他在C ++中如何做到这一点,但是除非我可以互动,否则在C#中对我没有帮助,而互动互动也很快.我在Internet中找到了使用MSDN帮助编写的课程,以使像素不安全访问像素.该课程非常快,但还不够快.这是课程: using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Drawing.Imaging; namespace DCOMProductions.Desktop.ScreenViewer { public unsafe class UnsafeBitmap { Bitmap bitmap; // three elements used for MakeGreyUnsafe int width;
0 2023-05-23
编程技术问答社区
gdi+ Graphics::DrawImage真的很慢~~。
我正在使用GDI+图形来绘制4000*3000图像的屏幕,但确实很慢.大约需要300毫秒.我希望它的占用不到10毫秒. Bitmap *bitmap = Bitmap::FromFile("XXXX",...); //--------------------------------------------------------------------------------------------------------------------------------------------- //这部分大约需要300ms,可怕! int width = bitmap->GetWidth(); int height = bitmap->GetHeight(); DrawImage(bitmap,0,0,width,height); 在> 我不能使用cachedbitmap,因为我想以后编辑位图. 我该如何改进?还是有错? 此本机GDI函数还将图像绘制到
2 2023-05-23
编程技术问答社区
Winforms。SuspendLayout/ResumeLayout不够用?
我有一个"自定义控件"的库.从本质上讲,我们有自己的按钮,圆角面板和一些具有自定义油漆的组箱.尽管在On -Paint方法中具有"数学",但控件还是非常标准的.在大多数情况下,我们要做的就是绘制圆角并为背景增加梯度.我们将GDI+用于所有这些. 这些控件还可以(根据我们的客户的看法非常好),但是,尽管使用了双重手段,但您可以看到一些重新绘制,尤其是在同一表单上有20个++按钮(例如)时.在表单上,​​您会看到按钮图……这很烦人. 我很确定我们的按钮不是地球上最快的事情,但我的问题是:如果双重缓冲区" on",那么重新划分不应该在后台发生,并且Windows子系统应该立即显示"结果" "? 另一方面,如果有"复杂" foreach循环会创建标签循环结束了,是否应该"几乎立即"出现所有这些控件(标签和按钮)?这不是那样发生的,您可以看到面板被填充. 知道为什么这不会发生?我知道没有示例代码很难评估,但这也很难复制.我可以用相机制作视频,但请相信我,这不是快速的:)
4 2023-05-23
编程技术问答社区
如何禁用透明控件的点击率?
我们的应用程序中有一个映射表格,需要Google Earth背景图像,并且由于您无法在面板下的浏览器中使用Google Earth插件,因此我们使用第二个表单来显示背景图像.我们在映射表格上有一个透明的面板,该图形是在Google Earth绘制的同步表格上绘制的. 我们通过给出255, 250, 250的透明度键并在绘制该颜色之前将面板背景设置为透明度来实现透明度.尽管现在在网上查看了可用的信息后,似乎面板不应该获得光标事件. 在大多数情况下,这可以很好地工作,但是在一个或两个客户的机器上(一个是Windows 7),光标将无法在透明的面板上正常工作.如果将光标放置在地图的绘制区域上,则所有这些都可以正常工作. 我认为问题是由于透明造成的,但是在大多数情况下,由于它起作用,因此我不确定发生了什么.我们已经更新了所有图形驱动程序,以查看客户机器上是否有自定义设置,但这没有帮助. 某人对透明度密钥的作用有明确的描述吗?有没有办法绝对设置面板应接收鼠标事件? 编
0 2023-05-19
编程技术问答社区
如何涂抹某个区域
我是C#&我正在尝试制作一个简单程序的绘画和绘画的新手,它具有3个相交的圆圈(a,b,c).我想做的是一定要油漆(根据结果,我得到). 例如:如果我得到1,我想填充黄色边界的区域,如果我得到4,我想填充绿色边界区域等等. 我绘制这些圆圈的代码: private void button1_Click(object sender, EventArgs e) { Graphics A = this.CreateGraphics(); Graphics B = this.CreateGraphics(); Graphics C = this.CreateGraphics(); Pen Bluepen = new Pen(Color.Blue, 2); Pen RedPen = new Pen(Color.Red, 2); Pen BlackPen = new Pen(Colo
0 2023-05-16
编程技术问答社区
为什么我的c#画图方法会耗尽内存?
我是C#的新手,并尝试通过编写一些简单的应用程序来学习以熟悉语法和.NET库.我接受的最新微型设备是一个极时钟我很早就注意到的问题之一是,该应用程序会不断"闪烁",这确实从演示文稿中消失了,因此我在网上阅读了有关如何实施双重缓冲区的信息,这消除与问题无关.这是我的onPaint方法;通过计时器控件称其为每33ms(〜30 fps).该应用的其余大部分只是用于拖动应用程序的处理程序(因为它是无框且具有透明背景),在双击上退出等等. protected override void OnPaint(PaintEventArgs e) { DateTime now = DateTime.Now; float secondAngle = now.Second / 60F; secondAngle += (now.Millisecond / 1000F) * (1F / 60F); float minuteAngle
0 2023-05-16
编程技术问答社区
Delphi/GDI+。设备上下文何时被创建/销毁?
通常在delphi中使用gdi+您可以使用 tpaintbox ,在 Onpaint 事件中进行绘画: procedure TForm1.PaintBox1Paint(Sender: TObject); var g: TGPGraphics; begin g := TGPGraphics.Create(PaintBox1.Canvas.Handle); try g.DrawImage(FSomeImage, 0, 0); finally g.Free; end; end; 这种范式的问题在于,每次浪费且性能不佳,创建一个破坏图形对象.此外,还有几个问题当然是当我可以创建图形对象时?我需要知道何时可用,然后何时不再有效.我需要此信息,以便我可以创建和破坏我的图形对象. 解决方案尝试Nº1 我可以在真正需要时创建创建问题来解决创建问题 - 首次称为 paint Cyce : procedure TForm1.P
2 2023-05-16
编程技术问答社区
C#绘画程序闪烁
我正在尝试在C#中制作一个简单的油漆程序,但是当我绘画时它会闪烁,就像我需要某种双重缓冲,但我不知道该怎么做. 我正在绘制Panel,我正在使用Bitmap存储图形. 这是我的代码: public partial class Form1 : Form { private Bitmap drawing; private bool leftDown = false; private int prevX; private int prevY; private int currentX; private int currentY; public Form1() { InitializeComponent(); drawing = new Bitmap(panel1.Width, panel1.Height); } private void panel1_Mous
2 2023-05-16
编程技术问答社区
Win32: 一个窗口在其整个生命周期中是否具有相同的HDC?
我可以在油漆周期外使用DC吗? 我的窗户的直流是否可以永远有效? 我试图弄清我的控件设备上下文(DC)有效多长. 我知道我可以打电话: GetDC(hWnd); 获取我控件窗口的设备上下文,但是可以吗? 当Windows向我发送WM_PAINT消息时,我应该致电 endPaint 正确地承认我我' VE对其进行了油漆,并在内部清除无效的区域: BeginPaint(hWnd, {out}paintStruct); try //Do my painting finally EndPaint(hWnd, paintStruct); end; 但是呼叫开始paint也使我返回了油漆结构内的DC.这是我应该绘画的直流. 我在文档中找不到任何东西,说BeginPaint()返回的DC与我从GetDC()获得的DC相同. 尤其是现在,在桌面组成的时代,在我在beginpaint之外获得的DC上绘画是否有效? 似乎有两种方法可以在油漆
2 2023-05-16
编程技术问答社区
用GDI+叠加图像
我正在尝试用其他几张图像叠加图像.我使用此代码来做到这一点: Dim gbkn As Bitmap = New Bitmap(7001, 7001, Imaging.PixelFormat.Format32bppArgb) Dim g As Graphics = Graphics.FromImage(CType(gbkn, Image)) g.DrawImage(Image.FromFile("C:\background.png"), New Point(0, 0)) g.DrawImage(Image.FromFile("C:\firstlayer.png"), New Point(0, 0)) g.DrawImage(Image.FromFile("C:\secondlayer.png"), New Point(0, 0)) 这与前两张图片一起使用.之后,抛出了OutofmemoryException. 我意识到图像的大小很大. 但是,不是某种程度上可以在某种程度上做叠加和
0 2023-05-15
编程技术问答社区
渲染半透明/透明的覆盖层
我需要一种快速的方法来在屏幕上绘制透明度支持的覆盖层.我已经进行了很多搜索,发现了一个潜在的解决方案(有自己的问题)和另一种不符合我要求的解决方案;特别是透明度支持. 我将从后者开始,然后访问前者. 解决方案1 ​​ 使用透明度的无边界形式,这是我发现的最建议的解决方案之一,也是最不帮助的解决方案. 此解决方案通过拥有新表单,使其无边界,将背景设置为Colour.White之类的背景,并将TransparencyKey设置为相同的颜色,是否是完整的屏幕和最上方,也许将其他一些选项设置为是否对鼠标和键盘看不见. 该解决方案的问题是它不支持透明度.它只会"敲出"颜色与TransparencyKey完全相同,因此,即使有丝毫差异的任何东西都将显示出屏幕上在屏幕上放置半透明对象的想法. 解决方案2 在 因为它的工作正常很好,但是不幸的是有一些问题. 首先;显然,曾经将其称为一次只会绘制一次,因此,如果屏幕在被绘制后完全刷新它会消失,我不明白如何解决此问题
6 2023-05-15
编程技术问答社区
GDI+ DashStyle在.NET中抛出OutOfMemoryException
我在呈现对象的层次结构时正在使用DashStyle.Dash.我的应用程序广泛使用Graphics.Transform,我发现在使用DashStyle.Dash的笔时,在某种比例值(包括100%的比例)和某些旋转角度,Graphics.DrawLine throws OutOfMemoryException.使用Google我发现这是一个 evary .到目前为止,我还没有找到解决这个问题的解决方法. 我有什么选择? 解决方案 我刚刚遇到了同样的问题.经过进一步调查,我发现了以下内容. 线长正好是自定义仪表板图案长度. 更改行长+/- 1像素避免了错误. 我正在使用LineCapRound和DashCapRound,切换到 LineCapSquare和DashCapFlat避免了错误 错误来自尝试将路径弄平(大概是从圆形末端) 笔宽度为零. 我的最终解决方案是不画零宽线!
0 2023-05-15
编程技术问答社区
在GDI+中递归绘制矩形时出现OutOfMemory异常
我使用GDI+在C#中填充矩形有问题.我正在尝试渲染 treemap ,因此构建了一种递归算法,从根到叶片水平并在任何情况下都绘制矩形,但如果节点恰好是叶子节点,也会填充矩形. 该代码适用于较小的树,但对于具有42层节点的较大数据集可重复崩溃.上的DrawRectangle呼叫在尝试在第16层以下渲染节点时抛出OutOfMemoryException,独立于32-/64位或调试和发布配置. 刷子和笔不会发生变化,因此它们存储在方法外部的数组中.创建或处置对象没有问题. 这是我用来渲染Treemap的递归方法: /// /// Renders a certain onto the canvas. /// /// The tree node to be rendered. /// The
2 2023-05-15
编程技术问答社区
使用OpenGL和Gdi+的GetDC, ReleaseDC, CS_OWNDC
阅读有关getDC/warrec的读,我应该总是做后者,并且窗口上的cs_owndc被认为是邪恶的: https://blogs.msdn.microsoft.com/oldnewthing/20060601-06/?p=31003 浏览我的代码,我看到我握住了从GETDC检索的DC,我已将其发送到WGLCreateContextAttribarb中.我假设在该DC上创建了上下文,因此随后将其从驾驶员下方释放出来是不好的举止.我的假设正确吗?目前,当我销毁其他OpenGL资源时,我会打电话给Releasec. 此外,在我的库中的其他地方,我称为getDC来实例化GDI+图形对象,然后在完成绘图时再次释放它.我认为,出于绩效原因,将DC和图形对象坚持下去,只有在WM_DISPLAYCHANGE等. 将其重新创建. 那么,在该领域有最佳实践指南吗?我勤奋地释放GDI+ DC的方式,但持续存在OpenGL DC似乎有些不一致. 解决方案 OpenGL和GDI+行为
12 2023-05-10
编程技术问答社区
快速的多窗口渲染
我一直在搜索和测试多个星期的c#天渲染库.到目前为止,我还没有找到一个在多窗格渲染设置上运行良好的单个库.要求是能够在12个以上的监视器设置(财务图表)上运行该程序,而不会在快速计算机上进行潜伏期.每个窗口需要每秒多次更新.在执行此操作时,CPU需要执行很多密集且时间至关重要的任务,因此某些负担必须转移到GPU.这就是硬件渲染介入的地方,用另一个词directx或opengl. 我尝试使用Windows表格进行GDI+,并认为它的需求太慢了.我尝试通过Opentk(在Windows表单控件上)进行OpenGL,该OpenGL似乎很快(我仍然有一些测试可以运行),但很难正常工作(很难找到/编程良好的文本渲染库).最近,我尝试了DirectX9,DirectX10和Direct2D通过SharpDX使用Windows表单.我尝试了每个窗口的单独设备和一个设备/多个交换链方法.所有这些导致多个窗户的性能非常差.例如,如果我将目标FPS设置为20并在不同监视器上打开4个全屏窗口,则整个操作
6 2023-05-10
编程技术问答社区
GDI/GDI+如何在没有OpenGL或DirectX的情况下工作
对不起,如果这里是题目的.如果是这样;请随时将其移至适当的网站. GDI/GDI+如何渲染到图形卡(在屏幕上显示内容),而无需使用较低级别的API与DirectX或OpenGL等GPU进行通信?它如何在不使用任何API的情况下将其绘制到屏幕上?是的;我知道该图像是在CPU上合成并渲染的,但是在显示在显示器上之前,必须以某种方式将其发送到GPU.这是如何工作的? 解决方案 GDI原始图由视频卡驱动程序实现.视频驱动程序由GPU制造商提供,并使用专有寄存器级界面与GPU进行通信,在此级别不需要公共API. 与您声称知道的相反,该图像通常没有完全呈现和合成CPU.相反,视频驱动程序可以免费使用CPU和GPU处理的任何组合,通常将大量的GDI命令(尤其是位块传输,又称爆炸)委派给GPU. . 由于专有界面必须足够强大才能支持OpenGL客户端驱动程序和DirectX驱动程序,因此GDI驱动程序可以将命令传递给GPU进行执行也就不足为奇了. 在启动(和Windows安
0 2023-05-10
编程技术问答社区
GDI、GDI+和OpenGL真的已经过时/淘汰了吗?
如果您打开页面 最后一个类别被描述为 传统图形:已过时并且不应在新的技术中使用的技术 应用. 此类别包括(除其他)以下API: gdi gdi+ OpenGl 您有什么看法?如果我想今天推出新软件,则必须支持Windows XP(仍然约占所有已安装系统的50%). Direct2D需要Windows 7/Vista.还应该使用什么? 解决方案 我怀疑微软对"遗产"的定义与任何明智的开发人员应该做的事情无关,而是基于Windows API的一些大重写. 从Windows Vista周围开始,Microsoft一直在重新设计其许多API.现在,我们将mmdevapi作为一个真正的声音API,WIC是一个真实的图像文件API等.从我所看到的/听到的内容中,这些新API比旧的API好得多,而"遗产"系统都可以使用基于新的.在Windows Vista和后来,DirectSound完全基于MMDevapi,并且需要通过WIC读取图像文件的组件.
4 2023-05-10
编程技术问答社区
如何将opencv mat图像转换为gdi位图
我想将OpenCV垫子文件转换为GDI+位图映像.我找不到有关如何执行此操作的信息? 我认为没有直接的方法,但我希望它不涉及将其写入文件并回信( http://opencv-users.1802565.n2.nabble.com/convert-iplimage-to-bit-to-bit-bit-bitmap-bitmap-td3784378.html ) 我需要写这样的东西: #include #include #include using namespace Gdiplus; Bitmap GetBitMap(cv::Mat inputImage) { Bitmap bitmap; // convert inputImage to bitmap?? return bitmap; } 解决方案 根据Bitmap GetBitMap(cv::Mat inputImage) {
12 2023-05-10
编程技术问答社区