可以用流的形式,也可以再转换一下,为什么一定要用字符呢,mssql的image字段好象是在sql传输的时候也是用的char的形式哈(没资料,猜的),转换的话
var stream:tmemorystream;
i:int64;
p
char;
begin
try
stream := tmemorystream.create;
tblobfield(AdoQuery1.fieldbyname('bmp')).savetostream(stream);
stream.postion :=0 ;//从0开始
p := getmem(stream.size * 2 + 1);
stream.postion :=0 ;//从0开始
stream.read(p,stream.size);
result := '';
for i:= 0 to length(p) - 1 do
begin
result := result + inttohex(ord(p),2);//转换16进制
end;
finally //无论如何 都 free掉 内存
stream.free;
p.free;
end;
end;
//result 就是 你想要的
当然 你如果想 只是取 图片 ,而不从字段来,可以变换一下
tblobfield(AdoQuery1.fieldbyname('bmp')).savetostream(stream);
改为
image1.Picture.Bitmap.SaveToStream(stream);
如果还不满意,将 image1.Picture.Bitmap.Canvas.Pixels 每个点 分别取出也可以,
否则,你只好分析bmp各种格式,再那个了