Graphics.DrawImage는 의도하지 않게 이미지를 다듬을 수 있습니까?

StackOverflow https://stackoverflow.com/questions/447233

  •  22-07-2019
  •  | 
  •  

문제

비트 맵을 사용하고 24 bpp로 변환하는 코드를 사용하여 해당 파일 형식이 필요한 프로그램에서 사용할 수 있습니다. 코드는 다음과 같습니다.

    using (Bitmap tempImage = new Bitmap(pageToScan.FullPath))
    {
       if (tempImage.PixelFormat != System.Drawing.Imaging.PixelFormat.Format24bppRgb)
       {
          using (Bitmap tempImage2 = new Bitmap(tempImage.Size.Width, tempImage.Size.Height,
             System.Drawing.Imaging.PixelFormat.Format24bppRgb))
          {
             using (Graphics g = Graphics.FromImage(tempImage2))
             {
                g.DrawImage(tempImage, new Point(0, 0));
             }
             RecognizeBitmap(pageToScan, tempImage2); //Thanks to Tim on this refactoring.
          }
       }
       else
          RecognizeBitmap(pageToScan, tempImage);
    }

위의 코드에 대한 두 가지 질문이 있습니다.

  1. 특정 이미지로, 나는 이것이 Tempimage2에서 가장 오른쪽으로 200 픽셀을 잘라 냈다고 생각합니다. 이게 가능해? 어떻게 이런 일이 일어날 수 있으며 어떻게 멈출 수 있습니까? 내 친구는 TIFF 파일의 보폭과 관련이 있다고 제안했습니다.
  2. 메모리에서 이미지를 24 bpp로 변환하는 더 빠른 방법이 있습니까?
도움이 되었습니까?

해결책

더 좋은 방법은 사용하는 것입니다 BitMap.Clone 방법. 이것은 pixelforMat을 매개 변수로 간주합니다.

using (Bitmap tempImage = new Bitmap(pageToScan.FullPath))    
{           
    if (tempImage.PixelFormat != System.Drawing.Imaging.PixelFormat.Format24bppRgb)
    {
        Rectangle r = new Rectangle(0, 0, tempImage.Width, tempImage.Height);
        RecognizeBitmap(pageToScan, tempImage.Clone(r, PixelFormat.Format24bppRgb);          
    }
    else                  
    {
        RecognizeBitmap(pageToScan, tempImage);    
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top