2012-09-01 2 views
1

저는 3d (red, cyan) 프로그램을 만들고 있습니다. 잘 진행되었지만 결합 할 때 "이미지"(코드 참조)가 영향을받지 않는 것으로 보입니다.Lockbit는 내 이미지에 영향을주지 않습니다.

내 실수는 무엇입니까?

는 가정 :

RImage_P(point) = {5,5} 
startCyan(point) = {0,0} 
startRed(point) = {5,5} 

CImage, RImage 코드 미만이다. 이미지 결과는 완전히 검은 색 투명 이미지입니다. 테스트 및 디버깅을 위해 Alpha에 주석을 달았습니다 (결과는 동일합니다).

private void bitCombine(System.Drawing.Point startCyan, System.Drawing.Point startRed) 
{ 
    using (Bitmap image = new Bitmap(CImage.Width + Math.Abs(RImage_P.X), CImage.Height + Math.Abs(RImage_P.Y),PixelFormat.Format32bppArgb)) 
    { 
     var rectfull = new Rectangle(0, 0, image.Width, image.Height); 
     var rect = new Rectangle(0, 0, CImage.Width, CImage.Height); 
     var bitsC = CImage.LockBits(rect, ImageLockMode.ReadOnly 
            , PixelFormat.Format32bppArgb); 
     var bitsA = alpha.LockBits(rect, ImageLockMode.ReadOnly 
            , PixelFormat.Format32bppArgb); 
     var bitsOutput = image.LockBits(rectfull, ImageLockMode.WriteOnly 
            , PixelFormat.Format32bppArgb); 
     unsafe 
     { 
      for (int y = 0; y < CImage.Height; y++) 
      { 
       byte* ptrC = (byte*)bitsC.Scan0 + y * bitsC.Stride; 
       byte* ptrA = (byte*)bitsA.Scan0 + y * bitsA.Stride; 
       byte* ptrOutput = (byte*)bitsOutput.Scan0 
            + (y+startCyan.Y)* bitsOutput.Stride; 
       for (int x = 0; x < CImage.Width; x++)// cyan values 
       {// gui+ is reversed BGRA 
        ptrOutput[4 * (x+startCyan.X)] = ptrC[4 * x];   // blue 
        ptrOutput[4 * (x + startCyan.X) + 1] = ptrC[4 * x + 1];// green 
        //ptrOutput[4 * (x + startCyan.X) + 3] = ptrA[4 * x + 3];// alpha 
       } 
      } 
      CImage.UnlockBits(bitsC); 

      var bitsR = RImage.LockBits(rect, ImageLockMode.ReadOnly 
             , PixelFormat.Format32bppArgb); 
      for (int y = 0; y < RImage.Height; y++)// red values 
      { 
       byte* ptrR = (byte*)bitsR.Scan0 + y * bitsR.Stride; 
       byte* ptrA = (byte*)bitsA.Scan0 + y * bitsA.Stride; 
       byte* ptrOutput = (byte*)bitsOutput.Scan0 
            + (y+ startRed.Y) * bitsOutput.Stride; 
       for (int x = 0; x < RImage.Width; x++) 
       {// gui+ is reversed BGRA 
        ptrOutput[4 * (x + startRed.X) + 2] = ptrR[4 * x + 2]; // red 
        //ptrOutput[4 * (x + startRed.X) + 3] = ptrA[4 * x + 3];// alpha 
       } 
      } 

      RImage.UnlockBits(bitsR); 
      alpha.UnlockBits(bitsA); 
      image.UnlockBits(bitsOutput); 


      this.image = image; 
     } 
    } 
} 

이미지 :

CIamge RImage

+1

게시 된 코드는 파란색과 알파로 설정되지 않으며 0의 알파는 검은 색 이미지를 생성합니다. 매우 작은 비트 맵으로 시작하여 코드를 디버깅하여 입력 및 출력을 더 잘 추적 할 수 있습니다. –

답변

0

나는이 작업을 수행하는 이미지 시각화에 발견하지만, 알파 채널 대답은 알파 채널의 값을 변경하는 것입니다 = 0 입니다