2012-01-17 2 views
-1

비트 맵 이미지를 시계 방향으로 90도 회전하려고합니다. infoheader의 width와 height의 너비와 높이를 변경해 보았습니다. 그래서 루프 할 때 높이, 너비가 반복되지만 회전하지 않으므로 X 및 Y 좌표로 입력해야합니다. 바이트 배열 섹션. 나는 이미 3 일 동안 갇혀 있었으므로 가능한 한 나를 도와주세요! 정말 고맙습니다. 코드를 통해 나를 안내해주세요, 다시 한번 감사드립니다!비트 맵 이미지에서 바이트 배열을 좌표 X와 Y로 읽어들입니까?

hfile = CreateFile(ofn.lpstrFile, GENERIC_READ, FILE_SHARE_READ, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); 
      ReadFile(hfile, &bfh, sizeof(bfh), &written, NULL); 
      ReadFile(hfile, &bih, sizeof(bih), &written, NULL); 
      bmi.bmiHeader = bih; 
      int imagesize = bih.biHeight * bih.biWidth * 3; // Allocate necessary data for image 
      image = new BYTE[imagesize]; 
      image1 = new BYTE[imagesize]; 
      ReadFile(hfile, image, imagesize, &written, NULL); 
      SetDIBitsToDevice(hdc, 0, 0, bih.biWidth, bih.biHeight, 0, 0, 0, 
       bih.biHeight, image,&bmi,DIB_RGB_COLORS); 

      width = bih.biHeight; 
      height = bih.biWidth; 
      for(int x=0; x<height; x++) 
      { 
       for(int y=0; y<width; y++) 
       { 

        image1[(y*height+x)*3+0] = image[(y*height-1-x)*3+0]; 
        image1[(y*height+x)*3+1] = image[(y*height-1-x)*3+1]; 
        image1[(y*height+x)*3+2] = image[(y*height-1-x)*3+2]; 

       } 
      } 
      SetDIBitsToDevice(hdc,height,0,width,height,0,0,0,bih.biHeight,image1,&bmi,DIB_RGB_COLORS); 
      width = bih.biHeight; 
      height = bih.biWidth; 
      ReleaseDC(hwnd, hdc); 
      return 0; 
      EndPaint(hWnd, &ps); 
      return 0; 

답변

0

우리는 데이터의 버퍼를 가지며, "획득"하고 이러한 매트릭스의 매트릭스 인덱스 (x, y)의 색을 "설정"할 수있는 클래스로이 분해 할 경우 일이 쉬워진다.

따라서 우리는 우리가 하나의 "구조체"에 RGB를 넣을 수 물론 간단한

setPixel(int x, int y, BYTE red, BYTE green, BYTE blue); 

getPixel(int x, int y, BYTE& red, BYTE& green, BYTE& blue) const; 

에있을 수 있었다.

그런 다음 당신은 당신의 루프에서

image2.setPixel(height-y-1, x, image1.getPixel(x, y, red, green blue)); 

을 가질 수 그것은 한 클래스가 올바르게 설정되어 회전한다.

+0

실례합니다. 저의 지식이 부족하지만 그것을 할 수있는 다른 방법이 없습니까? Setpixel과 getPixel은 루프에서부터 내가 알고있는 것에서 느린 것처럼 보이는데, 회전하는 이미지로 나오도록 구조를 변경할 수있는 다른 방법이 없습니까? – Newbie

+0

setPixel 및 getPixel을 씁니다. 그래서 빨리 쓰도록하십시오. 물론 인라인 될 수 있습니다. 코드를 따르기 만하면 훨씬 간단 해집니다. – CashCow

0

나는 그것을 알아 냈다.

이미지 바이트 배열을 취해 x 및 y를 반환하는 point1 및 point2 좌표가 추가되었습니다. 거기에서

은 내가

image1[point2(height-1-y,x)+0] = image[point1(x,y)+0]; 

어쨌든 감사

이상 높이와 너비를 전환, for 루프와

, 알아 냈어!

+0

몇 가지 방법으로 내 솔루션과 유사합니다. – CashCow

+0

어쨌든, 정말 고마워요 CashCow :) – Newbie

관련 문제