WEB开发网
开发学院软件开发VC GDI+ ColorMatrix的完全揭秘与代码实现(下) 阅读

GDI+ ColorMatrix的完全揭秘与代码实现(下)

 2008-09-09 19:25:20 来源:WEB开发网   
核心提示: 该过程中作了更详细的注释,其特点是处理速度较快,GDI+ ColorMatrix的完全揭秘与代码实现(下)(3),在我的机器上,不包括图像格式转换耗时,还得处理其显示的问题(TBitmap可不会显示带Alpha信息的图片),下面仅给出GDI+图像的ColorMatrix处理过程:// 设置

该过程中作了更详细的注释,其特点是处理速度较快。在我的机器上,不包括图像格式转换耗时,处理千万像素图片主对角线数据耗时不到50ms,而处理全部变换耗时350-400ms。

上面是通用的ColorMatrix处理过程,要处理GDI+或者TBitmap,还得进行些前期处理。GDI+的处理代码比较简单,而TBitmap的处理代码则比较复杂,因为TBitmap本身不具Alpha信息,必须人为地进行添加后再进行ColorMatrix运算,如果涉及到Alpha变换,还得处理其显示的问题(TBitmap可不会显示带Alpha信息的图片)。下面仅给出GDI+图像的ColorMatrix处理过程:

 // 设置图像颜色矩阵。参数:Bmp: GDI+图像, Matrix, 颜色矩阵
  procedure GdipSetColorMatrix(Bmp: TGpBitmap; Matrix: Gdiplus.TColorMatrix);
  var
  Data: TBitmapData;
  begin
  Data := Bmp.LockBits(GpRect(0, 0, Bmp.Width, Bmp.Height), [imWrite], pf32bppARGB);
  try
  SetColorMatrix(TImageData(Data), ImgUtils.TColorMatrix(Matrix));
  finally
  Bmp.UnlockBits(Data);
  end;
  end;
  // 按颜色矩阵显示图像。参数:画布, 显示坐标, GDI+图像, Matrix, 颜色矩阵
  procedure GdipColorMatrixDraw(Graphics: TGpGraphics; x, y: Integer;
  Image: TGpImage; Matrix: Gdiplus.TColorMatrix);
  var
  tmp: TGpBitmap;
  g: TGpGraphics;
  Adapter: TStreamAdapter;
  Stream: TStream;
  Clsid: TGUID;
  begin
  if Image.PixelFormat < pf24bppRGB then
  begin
  tmp := TGpBitmap.Create(Image.Width, Image.Height, pf32bppARGB);
  g := TGpGraphics.Create(tmp);
  try
  g.DrawImage(Image, 0, 0, Image.Width, Image.Height);
  finally
  g.Free;
  end;
  end
  else if Image.ImageType = itBitmap then
  tmp := TGpBitmap(Image).Clone(0, 0, Image.Width, Image.Height, pf32bppARGB)
  else
  begin
  Stream := TMemoryStream.Create;
  Adapter := TStreamAdapter.Create(Stream, soOwned);
  GetEncoderClsid('image/bmp', Clsid);
  IStream(Adapter)._AddRef;
  Image.Save(Adapter, Clsid);
  tmp := TGpBitmap.Create(Adapter);
  end;
  try
  GdipSetColorMatrix(tmp, Matrix);
  Graphics.DrawImage(tmp, x, y, tmp.Width, tmp.Height);
  finally
  tmp.Free;
  if (Image.PixelFormat >= pf24bppRGB) and (Image.ImageType <> itBitmap) then
  IStream(Adapter)._Release;
  end;
  end;

上一页  1 2 3 4  下一页

Tags:GDI ColorMatrix 完全

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接