H hitman007260 Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #61 ufo! 程序不小 是用dephi7和bcb 6编得
U ufo Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #62 试试这样: hdc2:=image.Canvas.Handle; hdc1:=TCanvas.create; 不要都引用同一个image,create一个tcanvas 然后从image拷贝图到新的canvas bitblt(hdc2,0,0,w,h,hdc1,0,0,notsrccopy); 然后释放新创建的canvas 思路就是这样,代码自行补充。
试试这样: hdc2:=image.Canvas.Handle; hdc1:=TCanvas.create; 不要都引用同一个image,create一个tcanvas 然后从image拷贝图到新的canvas bitblt(hdc2,0,0,w,h,hdc1,0,0,notsrccopy); 然后释放新创建的canvas 思路就是这样,代码自行补充。
H hitman007260 Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #63 hdc1:=TCanvas.create; hdc1 是TCanvas类型吗???
U ufo Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #64 这只是个思路 实际需要申明一个tcanvas类型的局部变量,然后create
U ufo Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #65 你可以把hdc1申明为 tcanvas 然后hdc1:=TCanvas.create; 然后使用 hdc1.handle
H hitman007260 Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #66 这个思路我用了多次了 一次是bitmap 甚至还有 image 都不行 我时试tcanvas吧
H hitman007260 Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #67 报错 canvas does not allow drewing
U ufo Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #68 你是不是在tlist内保存了很多的动态创建的Timage?
U ufo Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #70 canvas是封装了系统的gdi绘图,需要申请设备上下文的,如: ACanvas := TCanvas.Create; ACanvas.Handle := getdc(groupbox3.Handle);//可以用getdc(0)试试 ReleaseDC(0,ACanvas.Handle); ACanvas.Free;
canvas是封装了系统的gdi绘图,需要申请设备上下文的,如: ACanvas := TCanvas.Create; ACanvas.Handle := getdc(groupbox3.Handle);//可以用getdc(0)试试 ReleaseDC(0,ACanvas.Handle); ACanvas.Free;
U ufo Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #71 我觉得你把问题搞复杂了。 其实,只需一个imagelist控件,设置好图片大小,然后把图片装入。 再在桌面image上draw一个图片,然后对此image处理图片效果就是了。
H hitman007260 Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #72 动态生成的image 多少不固定 还能响应单双击动作 imagelist 好像没有add方法把? 另外 canvas是封装了系统的gdi绘图,需要申请设备上下文的,如: ACanvas := TCanvas.Create; ACanvas.Handle := getdc(groupbox3.Handle);//可以用getdc(0)试试 申请设备上下文是什么意思?
动态生成的image 多少不固定 还能响应单双击动作 imagelist 好像没有add方法把? 另外 canvas是封装了系统的gdi绘图,需要申请设备上下文的,如: ACanvas := TCanvas.Create; ACanvas.Handle := getdc(groupbox3.Handle);//可以用getdc(0)试试 申请设备上下文是什么意思?
U ufo Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #73 假设image1是一个在桌面上显示的控件。 如果你简单的一句 image1:=tlist1.items; 那么现在image1的对象指针指向了tlist1.items的内存地址 而image1原先的内存虽然不再被使用到了,但内存不会被释放,就造成了内存泄漏。 因为,在delphi内对image1引用或者赋值,操作的只是一个32位的指针,指向了一块在image1.create时申请好的内存。
假设image1是一个在桌面上显示的控件。 如果你简单的一句 image1:=tlist1.items; 那么现在image1的对象指针指向了tlist1.items的内存地址 而image1原先的内存虽然不再被使用到了,但内存不会被释放,就造成了内存泄漏。 因为,在delphi内对image1引用或者赋值,操作的只是一个32位的指针,指向了一块在image1.create时申请好的内存。
U ufo Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #74 设备上下文,你可以理解为系统资源的一种。 可以看看一些老的帖子,有解释的: http://www.delphibbs.com/delphibbs/dispq.asp?lid=3002409
H hitman007260 Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #75 但是我是对显示的image1里的canvas.bitmap取反 并更新,应该是改变内存里的值,image 得内存大小 地址应该到不会改变把 这种情况为什么内存泄露那?
H hitman007260 Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #76 然后从image拷贝图到新的canvas bitblt(hdc2,0,0,w,h,hdc1,0,0,notsrccopy); 如何把canvas弄回到image哪?直接image.canvas.assign(canvas)报错 bitblt(hdc1,0,0,w,h,hdc2,0,0, srccopy);则还是不行 内存还长
然后从image拷贝图到新的canvas bitblt(hdc2,0,0,w,h,hdc1,0,0,notsrccopy); 如何把canvas弄回到image哪?直接image.canvas.assign(canvas)报错 bitblt(hdc1,0,0,w,h,hdc2,0,0, srccopy);则还是不行 内存还长
U ufo Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #77 image:=imagelist.items; 很可能问题出在这里 因为你只是简单的把tlist里面的一个对象赋值给了image, 在delphi内,对象的赋值,只是简单的指向对象的指针赋值。 这样处理不好就会造成内存泄漏。 建议这样做: Image.Picture.Bitmap.Assign((imagelist.items as timage).picture.Bitmap); 现在,窗体的image上应该有图片显示了 然后对此image进一步处理
image:=imagelist.items; 很可能问题出在这里 因为你只是简单的把tlist里面的一个对象赋值给了image, 在delphi内,对象的赋值,只是简单的指向对象的指针赋值。 这样处理不好就会造成内存泄漏。 建议这样做: Image.Picture.Bitmap.Assign((imagelist.items as timage).picture.Bitmap); 现在,窗体的image上应该有图片显示了 然后对此image进一步处理
H hitman007260 Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #78 这种方法我试过了 是不是类似这样啊 w:= image.Picture.Bitmap.Width ; h:=image.Picture.Bitmap.Height ; ximage:=Timage.create(self); ximage.Parent:=image.Parent; ximage.Tag:=image.Tag; ximage.Width:=image.Width; ximage.Height:=image.Height; ximage.top:=image.top; ximage.left:=image.left; ximage.Transparent :=true; ximage.Stretch:=true; tmp:=tbitmap.create; tmp.assign(t4image.Picture .Bitmap); tmp.Canvas.CopyMode:=cmNotSrcCopy; TheRect.Left:=0; TheRect.Top:=0; TheRect.Right:=w; TheRect.Bottom:=h; tmp.Canvas.CopyRect(TheRect,t4image.Canvas,TheRect); ximage.Picture.Bitmap.assign(tmp); 还是不行的
这种方法我试过了 是不是类似这样啊 w:= image.Picture.Bitmap.Width ; h:=image.Picture.Bitmap.Height ; ximage:=Timage.create(self); ximage.Parent:=image.Parent; ximage.Tag:=image.Tag; ximage.Width:=image.Width; ximage.Height:=image.Height; ximage.top:=image.top; ximage.left:=image.left; ximage.Transparent :=true; ximage.Stretch:=true; tmp:=tbitmap.create; tmp.assign(t4image.Picture .Bitmap); tmp.Canvas.CopyMode:=cmNotSrcCopy; TheRect.Left:=0; TheRect.Top:=0; TheRect.Right:=w; TheRect.Bottom:=h; tmp.Canvas.CopyRect(TheRect,t4image.Canvas,TheRect); ximage.Picture.Bitmap.assign(tmp); 还是不行的
H hitman007260 Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #79 而且 好像 tlist 不能 (list.items as timage)
U ufo Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-07 #80 image:=imagelist.items; //就把这一句改掉, 改为Image.Picture.Bitmap.Assign(timage(imagelist.items).picture.Bitmap); 其他还是照你在本帖最开始的代码,试试看
image:=imagelist.items; //就把这一句改掉, 改为Image.Picture.Bitmap.Assign(timage(imagelist.items).picture.Bitmap); 其他还是照你在本帖最开始的代码,试试看