Изменение растровых изображений с помощью C # - PullRequest
0 голосов
/ 14 мая 2011

Я работал над своим проектом в колледже, где пытался изменить битовые значения растрового изображения.

Я загружаю растровое изображение в поток памяти, а затем извлекаю его в массив byte [].Теперь я изменил несколько центральных битов этого массива byte [] и затем преобразовал его обратно в растровое изображение.

Но я получил исключение во время выполнения, что "Invalid Bitmap".
Есть ли у точечного рисунка какой-то специальный формат вместо простых битов?

Ниже приведен код, используемый мной:

MemoryStream mstream = new MemoryStream();
        Bitmap b = new Bitmap(@"D:\my_pic.bmp");
        b.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp);
        byte[] ba = mstream.ToArray();
        mstream.Close();

        byte[] _Buffer = null;

        System.IO.FileStream _FileStream = new System.IO.FileStream(_FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);


        System.IO.BinaryReader _BinaryReader = new System.IO.BinaryReader(_FileStream);


        long _TotalBytes = new System.IO.FileInfo(_FileName).Length;


        _Buffer = _BinaryReader.ReadBytes((Int32)_TotalBytes);

        // close file reader
        _FileStream.Close();
        _FileStream.Dispose();
        _BinaryReader.Close();
        int leng1 = ba.Length;
        int leng2=_Buffer.Length;

for(i=(leng1)/2;i<leng1;i++)
{ 
 for(j=0;j<leng2;j++)
{
ba[i]=_Buffer[j];
}
if(j==(leng2-1))
{
 break;
 }
  }
   TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));
   Bitmap bitmap1 = (Bitmap)tc.ConvertFrom(ba);

1 Ответ

0 голосов
/ 14 мая 2011

У вас должна быть собственная цель - работать на этом низком уровне с растровым изображением, и это нормально.Если вы не ограничены в производительности, способ проще сделать графику на уровне графического API.Даже если вы чувствительны к производительности, другие люди уже проложили путь через джунгли.

Вернуться к вопросу.Формат файла BMP проще, чем некоторые другие, но все же существует множество разновидностей.Вот подробное введение в кровавые детали формата BMP:

Теперь, если вы просто анализируете свой собственный BMPфайлы, и вы знаете, что они 32-битные RGB, и заголовок будет такого-то размера, который вы можете пропустить и т. д., тогда это может сработать для вас.Если вам нужно обработать любой старый BMP, он очень быстро запутывается, поэтому библиотеки стараются обо всем позаботиться за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...