2013-03-08 2 views
1

스캔 한 문서의 모든 구석에 이미지를 가져 오려고합니다 (왼쪽 위, 오른쪽, 왼쪽 아래 및 오른쪽). 아래는 어떻게 구현하려고하지만, 저장된 이미지를 보았을 때 모든 다른 부분이지만 전체 문서가 아닌 왼쪽 위 모서리 만 보입니다. 이걸 어떻게 바꿀 수 있겠 니?올바르게 지정한 위치에 Drawing.Rectangle 사용 C# winforms

Bitmap result = fullImg; 
//top-left 
var bandImg1 = result.Clone(new System.Drawing.Rectangle(0, 0, 375, 375), fullImg.PixelFormat); 
//top-right 
var bandImg2 = result.Clone(new System.Drawing.Rectangle(100, 50, 375, 375), fullImg.PixelFormat); 
//bottom-left 
var bandImg3 = result.Clone(new System.Drawing.Rectangle(0, 50, 375, 375), fullImg.PixelFormat); 
//bottom-right 
var bandImg4 = result.Clone(new System.Drawing.Rectangle(100, 100, 375, 375), fullImg.PixelFormat); 

        bandImg1.Save("c:\\bandImg1.gif", System.Drawing.Imaging.ImageFormat.Gif); 
        bandImg2.Save("c:\\bandImg2.gif", System.Drawing.Imaging.ImageFormat.Gif); 
        bandImg3.Save("c:\\bandImg3.gif", System.Drawing.Imaging.ImageFormat.Gif); 
        bandImg4.Save("c:\\bandImg4.gif", System.Drawing.Imaging.ImageFormat.Gif); 

----- 추가와 업데이트 코드

Bitmap result = fullImg; 
        //top-left 
        var bandImg1 = result.Clone(new System.Drawing.Rectangle(0, 0, result.Width/2, result.Height/2), fullImg.PixelFormat); 
        //top-right 
        var bandImg2 = result.Clone(new System.Drawing.Rectangle(result.Width/2, 0, result.Width/2, result.Height/2), fullImg.PixelFormat); 
        //bottom-left 
        var bandImg3 = result.Clone(new System.Drawing.Rectangle(0, result.Height/2, result.Width/2, result.Height/2), fullImg.PixelFormat); 
        //bottom-right 
        var bandImg4 = result.Clone(new System.Drawing.Rectangle(result.Width/2, result.Height/2, result.Width/2, result.Height/2), fullImg.PixelFormat); 

        bandImg1.Save("c:\\bandImg1.gif", System.Drawing.Imaging.ImageFormat.Gif); 
        bandImg2.Save("c:\\bandImg2.gif", System.Drawing.Imaging.ImageFormat.Gif); 
        bandImg3.Save("c:\\bandImg3.gif", System.Drawing.Imaging.ImageFormat.Gif); 
        bandImg4.Save("c:\\bandImg4.gif", System.Drawing.Imaging.ImageFormat.Gif); 


        string QRinfo = Process(bandImg1); 

처리 방법은 아래 답변을 ------에 따라 :

public string Process(Bitmap bitmap) 
    { 
     var reader = new com.google.zxing.qrcode.QRCodeReader(); 

     try 
     { 
      LuminanceSource source = new RGBLuminanceSource(bitmap, bitmap.Width, bitmap.Height); 
      var binarizer = new HybridBinarizer(source); 
      var binBitmap = new BinaryBitmap(binarizer); 
      return reader.decode(binBitmap).Text; 
     } 
     catch (Exception e) 
     { 
      return e.Message; 
     } 
    } 
+0

하드 코드 된 숫자 대신 비트 맵 '너비'및 '높이'속성을 사용하십시오. – sparky68967

+0

@ sparky68967 페이지 너비와 높이를 사용할 때 메모리 부족 메시지가 나타납니다. 나는 각 구석의 특정 크기를 얻고 싶지만 내 포인트가 맞습니까? – Masriyah

+0

글쎄, 제대로 된 것 같지만 점수를 하드 코딩하는 것은 나쁜 생각이다. 예외를 제공하는 코드를 게시해야합니다. 모서리를 계산하기 위해 너비와 높이를 사용하는 경우 전체 문서를 가져 오는 것을 보장하는 유일한 방법입니다. – sparky68967

답변

1

내 생각은 직사각형을 계산할 때 너비와 높이가 result이거나 fullImg이어야합니다. 르 좌표 대신 값을 하드 코딩합니다. 다음과 같은 것 :

//top left 
var bandImg1 = result.Clone(new Rectangle(0, 0, result.Width/2, result.Height/2), result.PixelFormat); 
//top right 
var bandImg2 = result.Clone(new Rectangle(result.Width/2, 0, result.Width/2, result.Height/2), result.PixelFormat); 
//bottom left 
var bandImg3 = result.Clone(new Rectangle(0, result.Height/2, result.Width/2, result.Height/2), result.PixelFormat); 
//bottom right 
var bandImg4 = result.Clone(new Rectangle(result.Width/2, result.Height/2, result.Width/2, result.Height/2), result.PixelFormat); 

값을 하드 코딩하고 있기 때문에 현재 수행중인 작업이 효과가 없을 수 있습니다. 예를 들어 bandImg1의 경우 기본적으로 "왼쪽 상단에서 시작하여 오른쪽으로 375 픽셀, 아래로 375 픽셀 이동"이라는 사각형에 (0,0,375,375)을 사용하고 있습니다. 대신, "왼쪽 상단에서 시작하고, 이미지 중간에 가서 이미지의 절반 아래로 가십시오"라고 말한 (0, 0, result.Width/2, result.Height/2)을 사용하면 왼쪽 상단 모서리가됩니다.

+0

감사합니다. 나는 x와 y를 적절히 바꾸지 않았다. 당신의 도움을 주셔서 감사합니다. 또한 위의 내용을 기반으로 이미지가있는 모서리를 전체 문서에서 검색 할 수있는 방법을 알고 있습니까? – Masriyah

+0

그래서 내가 뭘하려고 오전 스캔 pdf에 qr 코드가 나타납니다. 나는 qr이 왼쪽 상단 모서리에 있도록 pdf를 회전시킬 수 있도록 qr 이미지 (네 모퉁이 중 하나)의 위치를 ​​찾고 싶습니다. – Masriyah

+0

@Amina 재미있을 것 같습니다. 나는 당신에게 새로운 질문을 시작하라고 말할 예정 이었지만, 이제는 이미 질문이 열려있는 것을 볼 수 있습니다. 내가 살펴 보겠지 만, 이미지 내에서 이미지를 찾는 경험이 없습니다. – sparky68967