var MS: TFileStream; begin if OpenDialog1.Execute
then begin MS:=TFileStream.Create(OpenDialog1.FileName,
fmOpenRead); Image1.Picture.Bitmap.LoadFromStream(MS); MS.Free; end; end;
var MS: TMemoryStream; pImage:
pointer; begin MS:=TMemoryStream.create; Image1.Picture.Bitmap.SaveToStream(MS); MS.Position:=0; pImage:=Invert(MS.Memory,
MS.size);
//Memory属性是指向实际内存块的指针 MS.Write(pImage^,MS.size); MS.Position:=0;
//上一行代码使指针移到了Stream末尾,所以要复位 Image1.Picture.Bitmap.LoadFromStream(MS); FreeMem(pImage);
MS.Free; end;
Invert函数如下:
function TForm1.Invert(pImage: pointer; size: Integer):
pointer; var pData, pMem: PChar; i:
Integer; begin pMem:=AllocMem(size); CopyMemory(pMem,pImage,size); pData:=pMem+54; for
i:=0 to size541 do begin pData^:=Char(not
integer(pData^)); pData:=pData+1; end; Result:=pMem; end;