呵呵,用ScanLine的效率要高些。
解决方案 »
- delphi想换界面风格怎么办?有没有其他类似xpman的东西?
- 数据库中后插入图片的方法(急!!!)
- 多条件复合统计报表--》请进
- 帮忙看看这个语句错在哪里?table3.filter := '供应商名称= '''+ dblookupcombobox1.Text + '''' and '名称= '''+ dblookupcombobox2.Tex
- dbgrid多選操作問題
- 各位大哥﹐有誰能提供QQ界面的設計思路﹐高分相送﹗
- 请问如何获知Indy的IdHTTP下载Internet文件时的进度?
- 如何判断image类型的字段是否有值
- Delphi生成的文件是不是需要某些库的支持才能正确运行呢?急问,多谢
- 请问我的Update语句为什么会有错误呢?急!急!急!急!
- 请教如何知道Windows 2000的运行状态?
- crystal report的问题.
T24bitColor = packed record
Blue, Green, Red: BYTE;
end;T32bitColor = packed record
Blue, Green, Red, Alpha: BYTE;
end;P24bitColors = ^T24bitColors;
T24bitColors = array [0..MaxListSize] of T24bitColor;P32bitColors = ^T32bitColors;
T32bitColors = array [0..MaxListSize] of T32bitColor;类似的还可以定义15bit和16bit高彩的数据结构。对于32bit的格式还可以定义一个变体结构,以简化赋值操作。
TMyColor = record
case Integer of
0: (Value: Cardinal);
1: (Color: TColor);
2: (bitColor: T32bitColor);
end;数组也可类似的改为
PMyColor = ^TMyColors;
TMyColors = array [0..MaxListSize] of TMyColor;使用时可以如下:
var
ix, iy, iCount: Integer;
ScanLines: array of P32bitColors;
AColor: T32bitColor;
begin SetLength(ScanLines, Bitmap.Height);
for iCount := 0 to Bitmap.Height - 1 do
ScanLines[iCount] := Bitmap.ScanLine[iCount]; ... ... ScanLines[iy][ix] := AColor.bitColor;end;
procedure TForm1.Button1Click(Sender: TObject);
var
ix, iy, iCount: Integer;
ScanLines: array of P32bitColors;
AColor: T32bitColor;
begin SetLength(ScanLines, img.picture.Bitmap.Height);
for iCount := 0 to img.picture.Bitmap.Height - 1 do
ScanLines[iCount] := img.picture.Bitmap.ScanLine[iCount];
ScanLines[iy][ix]:=acolor ;
end;
2,确认Bitmap的PixelFormat是pf32bit;
3,是aColor.bitColor := ScanLines[0][0];而不是aColor := ScanLines[0][0];
这样aColor.bitColor.Red、aColor.bitColor.Green、aColor.bitColor.Blue就分别代表红、绿、蓝3个分量。
应该aColor := ScanLines[0][0];
但是运行后会出现错误,我试过
AColor: TMyColor;
当然这只是我的习惯。用
AColor: T32bitColor;
也可以。运行错误是不是因为你用Image读入了其他格式的图像,比如JPG的?这样的情况下,TBitmap里面是没有数据的。因为Bitmap代表的是没有压缩的光栅数据。如果要通过Scanline操作,需要把它Draw到新的Bitmap上,从新的上读取。
for y := 0 to BitMap.height -1 do
begin
P := BitMap.ScanLine[y];
for x := 0 to BitMap.width -1 do
begin
//访问像素 RGB
//P^.rgbtBlue
//P^.rgbtGreen
//P^.rgbtRed
inc(P);//指向下一个像素
end;
end;