2017-01-09 2 views
0

это мой код для разделения изображения на 9 штукразделить изображение в Xamarin андроид

   imgs = new Bitmap[3, 3]; 
       int width, height; 
       width = _thePicture.Width/3; 
       height = _thePicture.Height/3; 
       for (int x = 0; x < 3; ++x) 
       { 
        for (int y = 0; y < 3; ++y) 
        { 
         // Create the sliced bitmap 
         imgs[x,y] = Bitmap.CreateBitmap(_thePicture, x * width, y * height, width, height); 
        } 
       } 

       _img1.SetImageBitmap(imgs[0, 0]); 
       _img2.SetImageBitmap(imgs[1, 0]); 
       _img3.SetImageBitmap(imgs[2, 0]); 
       _img4.SetImageBitmap(imgs[0, 1]); 
       _img5.SetImageBitmap(imgs[1, 1]); 
       _img6.SetImageBitmap(imgs[2, 1]); 
       _img7.SetImageBitmap(imgs[0, 2]); 
       _img8.SetImageBitmap(imgs[1, 2]); 
       _img9.SetImageBitmap(imgs[2, 2]); 

это будет обрезать изображение и вставленную в матрице массив растровых изображений. Проблема заключается в том, что пользователь берет изображение в портретном режиме, и когда приложение разбивает изображение на ландшафтную форму, а не на равные части. любая помощь будет принята с благодарностью.

+0

я исправил размер я изменил высоту быть равной шириной, так что я могу иметь равные части. но все еще есть проблема портрет, как я могу настроить фотографию на портрет? –

ответ

0

проблема заключается в том, что пользователь снимает изображение в портретном режиме, а приложение разбивает изображение в альбомной форме и не равномерно.

Вам необходимо указать индикатор, когда пользователь фотографирует в портретном режиме (скажем, isPortrait). И когда в портретном режиме, вы можете повернуть Bitmap перед разбиением изображения:

//set isPortrait=true if user take picture in portrait mode 
private async void BtnClick_Click(object sender, System.EventArgs e) 
{ 
    ... 
    //rotate the image if user take the picture in portrait mode 
    if (isPortrait) 
    { 
      thisPicture = RotateBitmap(_thisPicture, 90); 
    } 
    SplitImage(_thisPicture); 
} 
public Bitmap RotateBitmap(Bitmap bitmap, int degree) 
{ 
    int w = bitmap.Width; 
    int h = bitmap.Height; 

    Matrix mtx = new Matrix(); 
    mtx.SetRotate(degree); 

    return Bitmap.CreateBitmap(bitmap, 0, 0, w, h, mtx, true); 
} 
private void SplitImage(Bitmap _thePicture) 
{ 
    Bitmap[,] imgs; 

    imgs = new Bitmap[3, 3]; 
    int width, height; 
    width = _thePicture.Width/3; 
    height = _thePicture.Height/3; 

    for (int x = 0; x < 3; ++x) 
    { 
     for (int y = 0; y < 3; ++y) 
     { 

      // Create the sliced bitmap 
      imgs[x, y] = Bitmap.CreateBitmap(_thePicture, x * width, y * height, width, height); 
     } 
    } 

    _img1.SetImageBitmap(imgs[0, 0]); 
    _img2.SetImageBitmap(imgs[1, 0]); 
    _img3.SetImageBitmap(imgs[2, 0]); 
    _img4.SetImageBitmap(imgs[0, 1]); 
    _img5.SetImageBitmap(imgs[1, 1]); 
    _img6.SetImageBitmap(imgs[2, 1]); 
    _img7.SetImageBitmap(imgs[0, 2]); 
    _img8.SetImageBitmap(imgs[1, 2]); 
    _img9.SetImageBitmap(imgs[2, 2]); 
} 
Смежные вопросы