您正在使用一款已经过时的浏览器!部分功能不能正常使用。
请尝试升级或使用
其他浏览器。
请大家帮我解释一下图像旋转过程中其中几行代码的意思.在线等待!!!(100分)
taizhi
Unregistered / Unconfirmed
GUEST, unregistred user!
从网上搜索到旋转90度的代码如下:<br>procedure Rotate90(const Bitmap:TBitmap);<br>var<br> i,j:Integer;<br> rowIn,rowOut
RGBTriple;<br> Bmp:TBitmap;<br> Width,Height:Integer;<br>begin <br> Bmp:=TBitmap.Create;<br> Bmp.Width := Bitmap.Height;<br> Bmp.Height := Bitmap.Width;<br> Bmp.PixelFormat := pf24bit;<br> Width:=Bitmap.Width-1;<br> Height:=Bitmap.Height-1;<br> for j := 0 to Height do<br> begin<br> rowIn := Bitmap.ScanLine[j];<br> for i := 0 to Width do<br> begin<br> rowOut := Bmp.ScanLine
;<br> Inc(rowOut,Height - j);<br> rowOut^ := rowIn^;<br> Inc(rowIn);<br> end;<br> end;<br> Bitmap.Assign(Bmp);<br>end; <br>想请教各位以下几个问题:<br> 1、 rowIn := Bitmap.ScanLine[j];是什么意思?<br> 2、Inc(rowOut,Height - j);有什么作用?<br> 3、该过程只对于24位文件有效,如果是32位呢?旋转出来的效果变成黑白色了,这该怎么修改?
zywcd
Unregistered / Unconfirmed
GUEST, unregistred user!
1、获取当前行的地址指针的第一个位置。<br>2、修改输出像素地址指针位置。<br>3.使用这样的方式就可以适应不同的颜色深度 Bmp.PixelFormat := Bitmap.Bitmap<br>另外: rowIn,rowOut
RGBTriple;只是定义一个像素位的指针,<br>下面是相应的定义,<br>typedef struct tagRGBTRIPLE { // rgbt <br> BYTE rgbtBlue; <br> BYTE rgbtGreen; <br> BYTE rgbtRed; <br>} RGBTRIPLE;
zywcd
Unregistered / Unconfirmed
GUEST, unregistred user!
这样是选中-90度<br>procedure Rotate90(const Bitmap:TBitmap);<br>var<br> i,j:Integer;<br> rowIn,rowOut
RGBTriple;<br> Bmp:TBitmap;<br> Width,Height:Integer;<br> P
ByteArray;<br><br>begin<br> Bmp:=TBitmap.Create;<br> Bmp.Width:=Bitmap.Height;<br> Bmp.Height:=Bitmap.Width;<br> Bmp.PixelFormat:=Bitmap.PixelFormat; // pf24bit;<br> Width:=Bitmap.Width-1;<br> Height:=Bitmap.Height-1;<br> for j:=Height downto 0 do<br> begin<br> rowIn:=Bitmap.ScanLine[j];<br> for i:=0 to Width do<br> begin<br> rowOut:=Bmp.ScanLine
;<br> Inc(rowOut,j);//修改了这里,选择270度。<br> rowOut^:=rowIn^;<br> Inc(rowIn);<br> end;<br> end;<br> Bitmap.Assign(Bmp);<br>end;
zywcd
Unregistered / Unconfirmed
GUEST, unregistred user!
下面是旋转180度的代码。<br>procedure Rotate90(const Bitmap:TBitmap);<br>var<br> i,j:Integer;<br> rowIn,rowOut
RGBTriple;<br> Bmp:TBitmap;<br> Width,Height:Integer;<br> P
ByteArray;<br><br>begin<br> Bmp:=TBitmap.Create;<br> Bmp.Height:=Bitmap.Height;<br> Bmp.Width:=Bitmap.Width;<br> Bmp.PixelFormat:=Bitmap.PixelFormat; // pf24bit;<br> Width:=Bitmap.Width-1;<br> Height:=Bitmap.Height-1;<br> for j:=0 to Height do<br> begin<br> rowIn:=Bitmap.ScanLine[j];<br> rowOut:=Bmp.ScanLine[Height-j];<br> for i:=0 to Width do<br> begin<br> rowOut^:=rowIn^;<br> Inc(rowOut);<br> Inc(rowIn);<br> end;<br> end;<br> Bitmap.Assign(Bmp);<br>end;<br>全部完工。所有代码都测试过。
taizhi
Unregistered / Unconfirmed
GUEST, unregistred user!