Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка float в bitmap 
:(
    Опции темы
Bandicoot
  Дата 2.8.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 2.8.2009

Репутация: нет
Всего: нет



Доброго времени суток! Стоит такая задача. Есть массив byte значений (rgbValues), каждое значение которого представляет собой амплитуду пикселя изображения. Необходимо скопировать эти значение в bmp файл.

Код

public Bitmap return_bmp()
        {
            Bitmap bmp = new Bitmap(size_of_line, size_of_row,PixelFormat.Format24bppRgb);
            Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
            BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat);
            IntPtr ptr = bmpData.Scan0;
            
            byte[] rgbValues = new byte[bmpData.Stride*bmpData.Height];
            for (int i = 0; i < number_of_elements_in_array; i++)
            {
                rgbValues[i] = (byte)vals[i];
                rgbValues[2 * i] = (byte)vals[i];
                rgbValues[3 * i] = (byte)vals[i];
            }
           
            System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bmpData.Stride*bmpData.Height);
            bmp.UnlockBits(bmpData);
            return bmp;
        }



Но почему то на выходе получается каша вместо изображения. Массив rgbValues содержит size_of_line точек для каждой линии (по горизонтали), следующее значение массива (то есть size_of_line+1) является первым пикселем второй линии и т.д.  Не могу понять в чем дело. Помогите советом. Заранее спасибо.

Это сообщение отредактировал(а) Bandicoot - 2.8.2009, 12:10
PM MAIL   Вверх
-Mikle-
Дата 3.8.2009, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Я не знаю конкретно твою задачу, но если ты не ошибся в своем примере, то
смещения для каждого байта в массиве
                rgbValues[i * 3] = ...
                rgbValues[i * 3 + 1] = ...
                rgbValues[i * 3 + 2] = ...

number_of_elements_in_array должен равняться width * height.
длина массива vals также.
длина массива rgbValues - длина vals * 3

Цитата(Bandicoot @  2.8.2009,  14:58 Найти цитируемый пост)
следующее значение массива (то есть size_of_line+1) является первым пикселем второй линии

size_of_line*0 - первая точка первой линии
size_of_line*1 - первая точка второй линии
size_of_line*2 - первая точка третей линии

Добавлено через 9 минут и 3 секунды
size_of_line  --  bmpData.Stride


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.