На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Инверсия изображения , CF2.0 WM5.0 C#
    Всем привет!

    Есть PictureBox с картинкой.
    Как инвертировать изображение?

    Заранее всем благодарен!
      Подскажи, что ты понимаешь под словом - инвертировать?
        Инвертировать цвета (черный на белый и т.д.)
          ExpandedWrap disabled
            public static bool Invert(Bitmap b)
            {
                // GDI+ still lies to us - the return format is BGR, NOT RGB.
                BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),
                    ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
                int stride = bmData.Stride;
                System.IntPtr Scan0 = bmData.Scan0;
                unsafe
                {
                    byte * p = (byte *)(void *)Scan0;
                    int nOffset = stride - b.Width*3;
                    int nWidth = b.Width * 3;
                    for(int y=0;y < b.Height;++y)
                    {
                        for(int x=0; x < nWidth; ++x )
                        {
                            p[0] = (byte)(255-p[0]);
                            ++p;
                        }
                        p += nOffset;
                    }
                }
             
                b.UnlockBits(bmData);
             
                return true;
            }
            Или без unsafe'а
            ExpandedWrap disabled
              Bitmap bitmap = new Bitmap(pictureBox.Image);
              Rectangle rect = new Rectangle(0,0,bitmap.Width,bitmap.Height);
               
              BitmapData bitmapData = bitmap.LockBits(rect,ImageLockMode.ReadWrite,PixelFormat.Format32bppRgb);
              try
              {
                  int[] bitmapRGB = new int[bitmap.Width * bitmap.Height];
                  Marshal.Copy(bitmapData.Scan0, bitmapRGB, 0, bitmapRGB.Length);
                  for (int counter = 0; counter < bitmapRGB.Length; counter++) bitmapRGB[counter] = ~bitmapRGB[counter];
                  Marshal.Copy(bitmapRGB,0,bitmapData.Scan0,bitmapRGB.Length);
              }
              finally
              {
                  bitmap.UnlockBits(bitmapData);
              }
               
              pictureBox.Image = bitmap;
              Эти алгоритмы у меня есть:
              http://www.codeproject.com/cs/media/csharp...icfilters11.asp

              А можно без алгоритмов?
              На апи есть функции для копирования областей.
              Так же можно задать режим: XOR, AND и т.д.
              Есть ли похожее в CF2.0?
                Цитата -=CAP=- @
                А можно без алгоритмов?

                Ничего подобного нет и в обычном фреймворке, не то, что в урезаном CF 2.0. Стали бы люди писать алгоритмы если был готовый способ, сделать это в одну строчку? :) Если нет возможности вызвать твою API функцию, через PInvoke, то алгоритмы тебе в помощь :)
                  <_< понятно
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0296 ]   [ 16 queries used ]   [ Generated: 17.06.25, 22:48 GMT ]