24BIT-->>8BIT

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

24BIT-->>8BIT

Сообщение _Мика_ » 17.05.2004 (Пн) 18:20

Как картинку проеобпрозовать в 8 bit т.е. 256 цветов
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

TEH3OP
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 12.12.2003 (Пт) 20:19
Откуда: Москва

Способы...

Сообщение TEH3OP » 17.05.2004 (Пн) 23:18

_Мика_ писал(а):Как картинку проеобпрозовать в 8 bit т.е. 256 цветов

Хех... ну можно попробовать просто поковырять палитру и пиксельные данные вручную. Получится прикольная пробежка по двум массивам.
Ты про DIB осведомлён?

Можно почитать в MSDN "Bitmap function"или Эпплмана.

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 18.05.2004 (Вт) 13:11

Да так :oops: ........
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

Urvin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 518
Зарегистрирован: 04.06.2003 (Ср) 10:47
Откуда: с Марса

Сообщение Urvin » 18.05.2004 (Вт) 20:08

1. Делаем массив - палитру из нужных цветов.
2. Устанавливаем цикл по каждой точке на проверку близости к палитре.
3. Код для дельфей (басика не нашел)
Код: Выделить всё
function FindColor(const c: integer):integer;
var
  r: integer;
  g: integer;
  b: integer;
  n: integer;
  num: integer;
  test: integer;
begin
  r:= getRValue(c);
  g:= getGValue(c);
  b:= getBValue(c);
  test:= 1000;

  for n:= 0 to 255 do begin
    if (abs(getRValue(ColourPalette[n]) - r) + abs(getGValue(ColourPalette[n]) - g) + abs(getBValue(ColourPalette[n]) - b)) < test then begin
      test:= abs(getRValue(ColourPalette[n]) - r) + abs(getGValue(ColourPalette[n]) - g) + abs(getBValue(ColourPalette[n]) - b);
      num:=n;
    end;
  end;

  result:=ColourPalette[num];
end;

procedure TfrmMain.btnUsePaletteClick(Sender: TObject);
var
  x: integer;
  y: integer;
  pic1: TBitmap;
  pic2: TBitmap;
begin
  try
    pic1:= tbitmap.Create;
    pic2:= tbitmap.Create;
  finally
    pic1.LoadFromFile('in.bmp');
    pic2.LoadFromFile('in.bmp');
    for y := 0 to pic1.Height do begin
      for x := 0 to pic1.Width do begin
        pic2.Canvas.Pixels[x,y]:=findcolor(pic1.Canvas.Pixels[x,y]);
      end;
    end;
    picpic.Canvas.Draw(0,0,pic2);
  end;
  pic1.Free;
  pic2.Free;
end;
Не так страшен русский танк, как его пьяный экипаж

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 18.05.2004 (Вт) 21:10

Спасибо!! ща буду разбираться
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот, Yandex-бот и гости: 3

    TopList