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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
DarkAnima
Сообщений: n/a
#1

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

30.11.2011, 23:11. Просмотров 1274. Ответов 0
Метки нет (Все метки)

Ребят, помогите пожалуйста. У меня стоит задача изменить палитру в 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++ bmp (24 битный)
C++ изменение размера изображения
C++ Создание bmp изображения.(Нужна помощь)
C++ bmp в C++
Считывание bmp C++
C++ Изменение контрастности изображения
C++ Изменение размера bmp стандартными средствами c++
C++ bmp 8
Изменение байтов изображения, чтобы предотвратить его открытие просмотрщиками C++
C++ Кривой вывод изображения в bmp-файле
C++ Изменение глубины цвета изображения
Чтение BMP 24 C++

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

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

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