delphi 处理png

场景:关于delphi处理PNG图片的取像素有关问题

关于delphi处理PNG图片的取像素问题
我从网上找了一段二值化的代码,片jpg图片的时候没有什么问题,但处理PNG图片的时候就出现了问题

   newbmp := TBitmap.Create;
   newbmp.Assign(bitmap);
   newbmp.PixelFormat := pf32bit;
   for Y := 0 to bitmap.Height - 1 do
   begin
      P := newbmp.ScanLine[Y];
      for X := 0 to bitmap.Width - 1 do
      begin
         gray := Round(0.299 * P[3 * X + 2] + 0.587 * P[3 * X + 1] + 0.11 * P[3 * X]);
         //gray := Round(P[X]);
         // 灰化的计算公式
         if (gray > 128) then
            gray := 255
         else
            gray := 0;
         // 128为阙值
         //P[X] := gray;
         P[3 * X + 2] := gray;
         P[3 * X + 1] := gray;
         P[3 * X] := gray;
      end;
   end;
   bitmap.Assign(newbmp);


经过上的图片处理完了,处理图片宽度也不够
delphi 处理png
下面是原图
delphi 处理png
都转成了bmp了,但是像素点好像不一样,请指定一下要怎么处理,得到二值化图

------解决方案--------------------
png是矢量图,不应该用此种方法。