(C#)使用BitBlt函数绘出来的图都是黑色

作者&投稿:蔡娟 (若有异议请与网页底部的电邮联系)
c# 使用BitBlt函数在窗体上画图的问题~

你要在哪个窗体画图?别的窗口还是当前程序的?

PictureBox1.Handle.ToInt64
PictureBox1.CreateGraphics().Handle.ToInt64

用Graphics也是可以的,但我不懂怎么弄

补充:
你先在Form_Load里面把曲线画好,把Pic1的Image属性设置为你的曲线,然后这样:
Sub MoveLine(ByVal X As Integer, ByVal Y As Integer)
Dim old As Bitmap = Pic1.Image '这个是旧的图画
Dim newb As Bitmap = New Bitmap(Pic1.Width, Pic1.Height) '这个是新的图画
Dim g As Graphics
g = Graphics.FromImage(newb)
g.Clear(Pic1.BackColor) '设置背景
g.DrawImage(old, X, Y) '这边你自己把X和Y换成-1到1的值,用于移动图形
Pic1.Image = newb '设置图画
'这边可以自己加入Pic1.Refresh()
End If

在计时器的代码中里面写:
For i As Integer = 0 To Pic1.Weight '减去曲线的宽度
MoveLine(1, 0)
Next

For i As Integer = Pic1.Weight To 0 + 曲线宽度 Step 1
MoveLine(-1, 0)
Next

最好不要计时器了,直接一个按钮,Thread.Sleep(200)加在For中可以停顿片刻(单位:毫秒,这样才能做出连贯的动画)

可以的话多加分

必须是Graphics绘制到能看到的地方才能用BitBlt
也就是说先用Graphics的RrawImage把图绘到一个picbox,然后才能用BitBlt把图从一个picbox复制到另一个picbox
下面这个例子是VB.net的,不过可以C#化。如果需要就留言吧。

是不是100超过picturebox宽度了,图画到外面去了

Image img = Image.FromFile(@"image\1.bmp");
Graphics mg = Graphics.FromImage(img);
Graphics g = this.picMain.CreateGraphics();
//pictureBox picMain
int x = this.picMain.Width; //pictureBox的Width
int y = this.picMain.Height; //pictureBox的Height
IntPtr dc1 = g.GetHdc();
IntPtr dc2 = mg.GetHdc();
var hbitmap = img.GetHbitmap();
var holdObject = SelectObject(dc2, hbitmap);
BitBlt(dc1, 100, 100, x, y, dc2, 0, 0, ROP_SrcCopy);
其中SelectObject如下
[DllImport("gdi32.dll")]
public static extern IntPtr SelectObject(IntPtr hDc, IntPtr hObject);
原因可能是使用Graphics.FromImage的时候,.Net底层并没有将Bitmap对应的HBitmap选入HDC而只是将两个.Net对象联系起来了,而后在DrawImage中有两次SelectObject分别选入和选出以在HBitmap上绘图。所以独立于.Net进行GDI操作的时候,需要在GDI层面再将两者联系起来,使用SelectObject

我也遇到这个问题..


c在爱情中代表什么意思
C在爱情中通常代表“心”的意思。在爱情语境中,C往往被解读为“心”的象征。这种表达可能是通过字母形状与心的形状相似而产生的联想。当人们用C代表心时,他们可能是在含蓄地表达他们的感情,特别是在写情书或表达深情的时候。C这个字母的曲线与心脏的形状有相似之处,因此在表达爱意时,人们可能会选择...

c语言中的c代表什么意思?
大写字母C,下标n,上标m,表示从n个元素中取出m个元素的不同的方法数.如从5个人中选2人去开会,不同的选法有C(5,2)=10种。C(n,m)的计算方法是C(n,m)=n!\/[m!(n-m)!]=n*(n-1)*...*(n-m+1)\/[1*2*...*m],如C(5,2)=[5*4]\/[1*2]=10。

c语言中的c表示什么?
看这个c的定义变量,如 int c 表示整型变量,float c 表示浮点型变量。

C长等于什么?
圆的周长C=πd ~回答完毕~~\\(^o^)\/~祝学习进步~~~

C语言编程时出现的那个expected怎么理解啊?
C语言编程时编译失败后提示"expected"说明代码缺乏必要内容导致语法错误。expected表示预期,期望。在C语言编译失败后的提示信息中出现时表示编译器无法通过编译,且根据其错误给出合理的建议。此处可以发现编译器提示在花括号 '{' 前缺乏某些符号,可以帮助我们修改源代码,但需要注意的是编译器的判断可能出错...

注册安全工程师与安全员c证有什么不同呢
注册安全工程师与安全员c证的不同如下:【点击在线咨询问题】1、注册安全工程师是只要满足了条件,就可以报考安全员,通过考试即可领取证书。2、安全员c证则需要工作后,由聘用企业申请,然后参加考试。3、安全员属于建筑九大员之一,是任职施工现场安全管理的条件,也是资质办理的必备人员。4、安全员c证...

c corporation什么意思?
c corporation C类公司。s corporation S类公司 主要是美国的俩种公司形式。最初的话只有C股份有限公司一种形式,后来美国国税局为鼓励小企业主,允许符合特定条件的小企业以S股份有限公司形式付税。这种形式类似于合伙,各股东按股份比例分成,将收益打入个人所得中报税。在这种形式下,公司若有损失...

哈氏合金B和C的区别
哈氏合金是镍基合金的一种,目前主要分为B、C、G三个系列,它主要用于铁基Cr-Ni或Cr-Ni-Mo不锈钢、非金属材料等无法使用的强腐蚀性介质场合,在国外已广泛应用于石油、化工、环保等诸多领域。为改善哈氏合金的耐蚀性能和冷、热加工性能,哈氏合金先后进行了三次重大改进, 其发展过程如下:B系列 :...

type-c数据线是什么
若使用的是vivo手机,Type-c是USB数据线接口的一种形状,插入充电接口可以正反插,不需要区分方向。

C.C 是什么意思?
C.C.【C.C.の简介】日文:シー・ツー(发音为C-tsu)声优:ゆかな(野上尤加奈,ゆかな 发音为“YUKANA”)年龄:不明(表面看16岁左右)人种:暂定人类(古人类的说,和后羿一个时期吧)本名:不明(除了她本人和鲁鲁修,推论的是Caliburian日文发音:カリブリアン 或者 Clirburess )血...

秀峰区13957295677: (C#)使用BitBlt函数绘出来的图都是黑色 -
琴奇右美: 必须是Graphics绘制到能看到的地方才能用BitBlt 也就是说先用Graphics的RrawImage把图绘到一个picbox,然后才能用BitBlt把图从一个picbox复制到另一个picbox 下面这个例子是VB.net的,不过可以C#化.如果需要就留言吧.

秀峰区13957295677: C++如何给一个自绘Button贴图作背景 -
琴奇右美: Win32下按钮自绘:1. 新建一个类CBmpButton.写一个Create函数,此函数加载bmp到一个HBITMAP中;创建按钮CreateWindow;修改按钮消息循环SetWindowLong到自定义的消息循环中2. 在自定义的消息循环中,捕获WM_PAINT消息,在...

秀峰区13957295677: C#怎么画出带有坐标系的函数图像 -
琴奇右美: 大致思路,会用到GDI+绘图,画直线,绘制直角坐标系,然后每隔一段绘制小坐标,然后再画函数,这是你自己定义的,大概的网上去搜代码参考一下

秀峰区13957295677: C#中如何画函数图 -
琴奇右美: 下面就是源程序:// plot.cs: 画函数图形, 编译方法: csc /t:winexe plot.cs Expression.cs using System; using System.Drawing; using System.Windows.Forms; using Skyiv.Util;namespace Skyiv.Ben.Plot {sealed class PlotForm : Form{const...

秀峰区13957295677: C#怎么画出带有坐标系的函数图像
琴奇右美: 窗体画布 using System.Drawing.Graphics using System.drwing; //引用该空间 //FORM的LOAD事件或者构造函数里可以添加 Brush b=new SolidBrush(); pen p= new pen(color.red,1.0f); font f=new font(this.font.name); Graphics g=this....

秀峰区13957295677: C# 如何绘制三角函数曲线 -
琴奇右美: 好像没有画三角函数的方法似的!我这里有一个自己写的代码,可能参数设计的不是很好看起来不是很像,不过意思应该达到了!using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SIN { class ...

秀峰区13957295677: 哪位能给我一个c#调用系统dll函数的例子? -
琴奇右美: 下面是MSDN上的一个例子,关键字DllImport using System; using System.Runtime.InteropServices; class MainClass { [DllImport("User32.dll")] public static extern int MessageBox(int h, string m, string c, int type); static int Main(){ string ...

秀峰区13957295677: 如何使用C#语言画函数图,以及柱状图?
琴奇右美: 朋友,我来告诉你答案!要么用Graphics对象手工画或者用控件(比如mschart需要额外安装)画

秀峰区13957295677: C#初学者:C#调用dll库文件中的函数的方法 -
琴奇右美: 1)添加引用dll //这个你已经实现了 ,而dll的名称MVision正是GetPicture方法所在类的命名空间的名称.2)using MVision; // 你已经实现,引用GetPicture方法所在类的命名空间3)尝试在你的方法内部这样使用: a) 对于静态方法:MVision.类.GetPicture // 由于不知道MVision下面有哪些类有GetPicture 方法,所以你要去一个个类查看是否包含GetPicture 方法.b) 对于实例方法 则 先实例化此类,再调用 MVision.类 classInstance= new MVision.类(); classInstance.GetPicture(...);

秀峰区13957295677: 求所有C#字符串函数大全及使用方法. -
琴奇右美: C#字符串函数大全将包括Len Len(string|varname) 、Trim Trim(string) 、Ltrim Ltrim(string)等多项内容,希望本文能对大家有所帮助.LenLen(string|varname)返回字符串内字符的数目,或是存储一变量所需的字节数.TrimTrim(string)将...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网