M me555555 Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-07 #1 一个IMAGE控件中有一幅图像。如何能够得到图像数据的指针?
暗 暗夜中独舞 Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-11 #3 图象数据指针?应该是句柄吧?找到句柄就可以对其进行操作了呀
X [xiaopei] Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-11 #4 //直接获取Image中的图像数据好像是没办法的,不过可以用Stream读出来吧。 var MemStream:TStream; pStreamBuffChar; begin MemStream := TMemoryStream; try Image1.Picture.Graphic.SaveToStream(MemStream); GetMem(pStreamBuff,MemStream.Size); try Stream.Seek(0,soFromBeginning); Stream.ReadBuffer(pStreamBuff^,Stream.Size); finally FreeMem(pStreamBuff,Stream.Size); end; finally Stream.Free; end; end;
//直接获取Image中的图像数据好像是没办法的,不过可以用Stream读出来吧。 var MemStream:TStream; pStreamBuffChar; begin MemStream := TMemoryStream; try Image1.Picture.Graphic.SaveToStream(MemStream); GetMem(pStreamBuff,MemStream.Size); try Stream.Seek(0,soFromBeginning); Stream.ReadBuffer(pStreamBuff^,Stream.Size); finally FreeMem(pStreamBuff,Stream.Size); end; finally Stream.Free; end; end;
M me555555 Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-12 #5 现在用的就是楼上的。还是间接的。图像改过后还得传递到IMAGE。现需要直接修改。所以需要得到图像的内存指针。进行直接修改
X xifengge Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-12 #6 为什么要直接改?一个图片大的也就几百兆,有必要吗?
Y yth Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-19 #8 var Bitmap:TBitmap; WinBitmap:Windows.TBitmap; begin GetObject(Bitmap.Handle,Sizeof(WinBitmap),@WinBitmap); 这样 WinBitmap.bmBits^ 就是图像数据区指针
var Bitmap:TBitmap; WinBitmap:Windows.TBitmap; begin GetObject(Bitmap.Handle,Sizeof(WinBitmap),@WinBitmap); 这样 WinBitmap.bmBits^ 就是图像数据区指针
M me555555 Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-19 #9 to yth 这个指针是直接指向图像的数据区还是指向数据头
M me555555 Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-19 #10 to yth 修改 WinBitmap.bmBits^ 的数据后为什么image1的图像不能马上变化 必须 image1.Repaint ; 才能看到新数据的图?
M me555555 Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-19 #11 如果不能将新数据马上显示。和[xiaopei]的方法也差不多
X [xiaopei] Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-19 #12 你的意思就是想直接操作显存中的图像数据吧?这个Image控件可没有这个功能,因为显存中的图像数据是由系统控制的,不是由Image控件控制的。就算你得到这个显存中的图像数据指针,你的程序也没有权限直接对显存内存直接读写的。要直接操作这个显存内存数据,只有写驱动进入系统Ring0层才有权限操作(Ring3层的程序所能做的就是使用GDI函数对系统提供的Device设备环境句柄进行操作(Image控件也只是封装了这些GDI函数的操作而已))或者使用上面的方法先读出来操作再写回显存中去。
你的意思就是想直接操作显存中的图像数据吧?这个Image控件可没有这个功能,因为显存中的图像数据是由系统控制的,不是由Image控件控制的。就算你得到这个显存中的图像数据指针,你的程序也没有权限直接对显存内存直接读写的。要直接操作这个显存内存数据,只有写驱动进入系统Ring0层才有权限操作(Ring3层的程序所能做的就是使用GDI函数对系统提供的Device设备环境句柄进行操作(Image控件也只是封装了这些GDI函数的操作而已))或者使用上面的方法先读出来操作再写回显存中去。
M me555555 Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-20 #15 [red]<因为显存中的图像数据是由系统控制的,不是由Image控件控制的。就算你得到这个显存中的图像数据指针,你的程序也没有权限直接对显存内存直接读写的。要直接操作这个显存内存数据,只有写驱动进入系统Ring0层才有权限操作(Ring3层的程序所能做的就是使用GDI函数对系统提供的Device设备环境句柄进行操作(Image控件也只是封装了这些GDI函数的操作而已))或者使用上面的方法先读出来操作再写回显存中去>[/red][][][]
[red]<因为显存中的图像数据是由系统控制的,不是由Image控件控制的。就算你得到这个显存中的图像数据指针,你的程序也没有权限直接对显存内存直接读写的。要直接操作这个显存内存数据,只有写驱动进入系统Ring0层才有权限操作(Ring3层的程序所能做的就是使用GDI函数对系统提供的Device设备环境句柄进行操作(Image控件也只是封装了这些GDI函数的操作而已))或者使用上面的方法先读出来操作再写回显存中去>[/red][][][]
X [xiaopei] Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-20 #16 上面只是知道理论,但我还没有学习过写驱动和对IO显存等直接操作呢。
M me555555 Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-20 #17 to [xiaopei] 理论水平高以后一定成高手。虽然没有得到所需的答案还是谢谢你。