Форум программистов, компьютерный форум CyberForum.ru

Изменение палитры bmp изображения - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
DarkAnima
Сообщений: n/a
30.11.2011, 23:11     Изменение палитры bmp изображения #1
Ребят, помогите пожалуйста. У меня стоит задача изменить палитру в bmp изображении чтоб первые 118 цветов были белыми, а другие 118 черными. Другими словами палитра должна иметь вид:
R G B
1 0 0 0
2 0 0 0
3 0 0 0
..
118 0 0 0
119 255 255 255
120 255 255 255
121 255 255 255
....
218 255 255 255

реализовать надо на с++. Я нашла похожий код на делфи, но к сожалению в делфи я не шарю:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
var
  Palette : HPalette;
  PaletteSize : Integer;
  LogSize: Integer;
  LogPalette: PLogPalette;
begin
  Palette := Image1.Picture.Bitmap.ReleasePalette;
  if Palette=0 then exit;
  if GetObject(Palette, SizeOf(PaletteSize), @PaletteSize) = 0 then Exit;
  if PaletteSize = 0 then Exit;
  LogSize := SizeOf(TLogPalette) + (PaletteSize - 1) * SizeOf(TPaletteEntry);
  GetMem(LogPalette, 16);
  try
    with LogPalette^ do begin
      palVersion := $0300;
      palNumEntries := $0200;
      GetPaletteEntries(Palette, 0, 2, palPalEntry);
      palPalEntry[0].peRed := 0;
      palPalEntry[0].peGreen := 0;
      palPalEntry[0].peBlue := 255;
    end;
    Image1.Picture.Bitmap.Palette := CreatePalette(LogPalette^);
  finally
    FreeMem(LogPalette, LogSize);
    DeleteObject(Palette);
  end;
end;
 
Этот код изменяет черный цыет в изображении на синий. 
мои попытки перевести на с++ привели меня вот к этому коду:
 
 HPALETTE  Palette;
 int PaletteSize;
 int LogSize;
 LOGPALETTE LogPalette;
 
 Palette = Image1->Picture->Bitmap->ReleasePalette();
 LogSize = sizeof(TLogPalette) + (PaletteSize - 1) * sizeof(TPaletteEntry);
 LogPalette.palVersion=0x300;
 LogPalette.palNumEntries=0x200;
 GetPaletteEntries(Palette, 0, PaletteSize, LogPalette.palPalEntry);
 
 LogPalette.palPalEntry[0].peRed=0;
 LogPalette.palPalEntry[0].peGreen=0;
 LogPalette.palPalEntry[0].peBlue=255;
 
 Image1->Picture->Bitmap->Palette = CreatePalette(LogPalette);
 
Но в нем существуют проблемы с  LOGPALETTE LogPalette т к я не знаю как перевесли с делфи GetMem(LogPalette, 16);
Помогите пожалуйста с переводом этого кода на с++ или подскажите другой вариант смены палитры.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2011, 23:11     Изменение палитры bmp изображения
Посмотрите здесь:

C++ изменение размера изображения
C++ Создание bmp изображения.(Нужна помощь)
C++ Изменение контрастности изображения
C++ Работа с BMP-файлами (класс "8 битное BMP изображение)
C++ Изменение размера bmp стандартными средствами c++
C++ bmp 8
Изменение байтов изображения, чтобы предотвратить его открытие просмотрщиками C++
C++ Кривой вывод изображения в bmp-файле

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 22:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru