Создание и отображение Grayscale Bitmap-а ...
От: nya  
Дата: 20.09.07 10:20
Оценка:
Проблема такая — есть массив пикселей монохромного изображения, каждому пикселю соответствует 1 байт, то есть получается 256 градаций серого. Пытаюсь создать битмэп с помощью CreateBitmap. Это получается только при двух значениях глубины цвета — 1 или 32, при остальных значениях на форме ничего не отображается, а при попытке сохранения файла с рисунком — вылезает ошибка "Недостаточно памяти". Можно каким-то образом работать с такими изображениями — без преобразования их в 32-битный формат?
Спасибо.
Re: Создание и отображение Grayscale Bitmap-а ...
От: wallaby  
Дата: 20.09.07 10:46
Оценка:
Здравствуйте, nya, Вы писали:

nya>Проблема такая — есть массив пикселей монохромного изображения, каждому пикселю соответствует 1 байт, то есть получается 256 градаций серого. Пытаюсь создать битмэп с помощью CreateBitmap. Это получается только при двух значениях глубины цвета — 1 или 32, при остальных значениях на форме ничего не отображается, а при попытке сохранения файла с рисунком — вылезает ошибка "Недостаточно памяти". Можно каким-то образом работать с такими изображениями — без преобразования их в 32-битный формат?

nya>Спасибо.

Я просто приделывал к массиву заголовок (bmp-файла) и загружал в Bitmap через LoadFromFile или LoadFromStream. Это было давно.
---
The optimist proclaims that we live in the best of all possible worlds; and the pessimist fears this is true
Re: Создание и отображение Grayscale Bitmap-а ...
От: Sergei I. Gorelkin Россия  
Дата: 20.09.07 10:53
Оценка:
Здравствуйте, nya, Вы писали:

nya>Проблема такая — есть массив пикселей монохромного изображения, каждому пикселю соответствует 1 байт, то есть получается 256 градаций серого. Пытаюсь создать битмэп с помощью CreateBitmap. Это получается только при двух значениях глубины цвета — 1 или 32, при остальных значениях на форме ничего не отображается, а при попытке сохранения файла с рисунком — вылезает ошибка "Недостаточно памяти". Можно каким-то образом работать с такими изображениями — без преобразования их в 32-битный формат?

nya>Спасибо.

Можно. CreateDIBSection(). Если нужно массив пикселей только рисовать на экране, то можно ничего и не создавать, достаточно StretchDIBits().
Ну и наверное TBitmap.PixelFormat тоже будет работать...
Re: Создание и отображение Grayscale Bitmap-а ...
От: SergeyIT Россия  
Дата: 20.09.07 17:16
Оценка:
Когда-то делал так
var
  HPal: HPALETTE = 0;
....

function GrayPalette: HPALETTE;
var
  i: Integer;
begin
  Result := HPal; //глобальная переменная, если создано то вернуть предыдущее значение
  if HPal <> 0 then
    exit;
  Pal.lPal.palVersion:=$300;
  Pal.lPal.palNumEntries:=256;
  for i := 0 to 255 do
  begin
    Pal.lpal.PalpalEntry[i].peRed := i;
    Pal.lpal.PalpalEntry[i].peGreen := i;
    Pal.lpal.PalpalEntry[i].peBlue := i;
    Pal.lpal.PalpalEntry[i].peFlags := 0;
  end;
  HPal := CreatePalette(Pal.lpal);
  Result := HPal;
end;

что-то типа
....
//  Image.Picture.Bitmap ... // Установить размеры
  Image.Picture.Bitmap.PixelFormat := pf8bit;
  Image.Picture.Bitmap.Palette:= GrayPalette;
//  скопировать на Image.Picture.Bitmap свою картинку
// можно записать в файл
...
Извините, я все еще учусь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.