sexta-feira, 4 de maio de 2012

Lazarus Pascal - TLazIntfImage - Manipulando Bitmaps - II

Os procedimentos deste post devem ser precedidos pelos já definidos no post da parte I.

Manipulando os pixels de TLazIntfImage


     CurColor_old := SrcIntfImg.Colors[0,0];

     for py:=0 to SrcIntfImg.Height-1 do
     begin
       for px:=0 to SrcIntfImg.Width-1 do
       begin
         CurColor:=SrcIntfImg.Colors[px,py];
          TempIntfImg.Colors[px,py] := CurColor xor TColorToFPColor(clRed);
       end;
     end;

     TempIntfImg.CreateBitmaps(ImgHandle,ImgMaskHandle,false);
     TempBitmap.Handle:=ImgHandle;
     TempBitmap.MaskHandle:=Mascara.MaskHandle;
     Img1.Picture.Bitmap.Assign(TempBitmap);
     Img1.Refresh;

Percorremos (scaneamos) as linhas da imagem de cima para baixo (o ponto 0,0 é o superior esquerdo da imagem). A cada linha escaneada, scaneamos da esquerda para a direita.

No exemplo fizemos uma operação lógica xor sobre cada pixel em relação à cor vermelha. Observe o efeito em seu programa.


Código completo deste procedimento


  TempBitmap := TBitmap.Create;
     oBmp := TBitmap.Create;
     oBmp.PixelFormat:=pf32bit;
     oBmp := Img1.Picture.Bitmap;


     SrcIntfImg:=TLazIntfImage.Create(0,0);
     SrcIntfImg.LoadFromBitmap(oBmp.Handle,oBmp.MaskHandle);
     TempIntfImg:=TLazIntfImage.Create(0,0);
     TempIntfImg.LoadFromBitmap(oBmp.Handle,oBmp.MaskHandle);
     CurColor_old := SrcIntfImg.Colors[0,0];

     for py:=0 to SrcIntfImg.Height-1 do
     begin
       for px:=0 to SrcIntfImg.Width-1 do
       begin
         CurColor:=SrcIntfImg.Colors[px,py];

          TempIntfImg.Colors[px,py] := CurColor xorTColorToFPColor(clRed);
       end;
     end;

     TempIntfImg.CreateBitmaps(ImgHandle,ImgMaskHandle,false);
     TempBitmap.Handle:=ImgHandle;
     TempBitmap.MaskHandle:=ImgMaskHandle;
     Img1.Picture.Bitmap.Assign(TempBitmap);
     Img1.Refresh;
                       

Nenhum comentário:

Postar um comentário