如何得到IMAGE控件的图像数据指针(100分)

  • 主题发起人 主题发起人 me555555
  • 开始时间 开始时间
M

me555555

Unregistered / Unconfirmed
GUEST, unregistred user!
一个IMAGE控件中有一幅图像。如何能够得到图像数据的指针?
 
有没有指针高手啊?顶
 
图象数据指针?应该是句柄吧?找到句柄就可以对其进行操作了呀
 
//直接获取Image中的图像数据好像是没办法的,不过可以用Stream读出来吧。
var MemStream:TStream;
pStreamBuff:pChar;
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。现需要直接修改。所以需要得到图像的内存指针。进行直接修改
 
为什么要直接改?一个图片大的也就几百兆,有必要吗?
 
大富翁上的高手都去睡觉了吗?还是去参加两会了
 
var
Bitmap:TBitmap;
WinBitmap:Windows.TBitmap;
begin
GetObject(Bitmap.Handle,Sizeof(WinBitmap),@WinBitmap);

这样 WinBitmap.bmBits^ 就是图像数据区指针
 
to yth
这个指针是直接指向图像的数据区还是指向数据头
 
to yth

修改 WinBitmap.bmBits^ 的数据后为什么image1的图像不能马上变化
必须 image1.Repaint ; 才能看到新数据的图?
 
如果不能将新数据马上显示。和[xiaopei]的方法也差不多
 
你的意思就是想直接操作显存中的图像数据吧?这个Image控件可没有这个功能,因为显存中的图像数据是由系统控制的,不是由Image控件控制的。就算你得到这个显存中的图像数据指针,你的程序也没有权限直接对显存内存直接读写的。要直接操作这个显存内存数据,只有写驱动进入系统Ring0层才有权限操作(Ring3层的程序所能做的就是使用GDI函数对系统提供的Device设备环境句柄进行操作(Image控件也只是封装了这些GDI函数的操作而已))或者使用上面的方法先读出来操作再写回显存中去。
 
to [xiaopei]
如何读写显存 ?
 
我也不会。[8)]
 
[red]<因为显存中的图像数据是由系统控制的,不是由Image控件控制的。就算你得到这个显存中的图像数据指针,你的程序也没有权限直接对显存内存直接读写的。要直接操作这个显存内存数据,只有写驱动进入系统Ring0层才有权限操作(Ring3层的程序所能做的就是使用GDI函数对系统提供的Device设备环境句柄进行操作(Image控件也只是封装了这些GDI函数的操作而已))或者使用上面的方法先读出来操作再写回显存中去>[/red][:D][:D][:D]
 
上面只是知道理论,但我还没有学习过写驱动和对IO显存等直接操作呢。:P
 
to [xiaopei]
理论水平高以后一定成高手。虽然没有得到所需的答案还是谢谢你。
 
后退
顶部