我从文件BMP文件中读像素到pbuffer中,再显示出来,发现图像是倒置着的,哪位知道问题所在,
var pbuffer:PByte;
buffer_size:integer;
frame_time:int64;
i:Integer;
j,k,m,n:Integer;
r,g,b:Byte;
fp:FILE;
fHandle:integer;
begin
......(把像素读到pbuffer中)
//imgShow是一个image控件,要把像素逐个显示在上面
for i:=0 to imgShow.Height-1 do begin
for j:=0 to imgShow.Width-1 do begin
b:=pbuffer^;
inc(pbuffer);
g:=pbuffer^;
inc(pbuffer);
r:=pbuffer^;
inc(pbuffer);
//inc(pbuffer);//我知道,有些情况下是四位对齐的,需要再加一次,但这里没用
imgShow.Canvas.Pixels[j,i]:=rgb(r,g,b);
end;
end;
如此显示出来竟然是上下倒置的图像,一下子也想不出问题所在,请高手帮看看,谢谢!
我想是因为你读取BMP数据的顺序和写入TImage控件的顺序相反吧。
为什么你不直接用TImage.LoadFromFile呢?
for i:=imgShow.Width- to 0 down do begin
for j:=1imgShow.Height-1 to 0 down do begin
b:=pbuffer^;
inc(pbuffer);
g:=pbuffer^;
inc(pbuffer);
r:=pbuffer^;
inc(pbuffer);
//inc(pbuffer);//我知道,有些情况下是四位对齐的,需要再加一次,但这里没用
imgShow.Canvas.Pixels[j,i]:=rgb(r,g,b);
end;
end;
大树的那样就可以吧,因为图片扫描是重上面向下面开始的,最上面的一行为0行
没有问题,BMP位图本来就是如此储存的,坐标系不一样
如果记录Height的数据读出来为负数才是你想象中的那种储存方式