powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Преобразоване 24 бит битмап
10 сообщений из 10, страница 1 из 1
Преобразоване 24 бит битмап
    #33406986
tors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь
C ув. Tors
...
Рейтинг: 0 / 0
Преобразоване 24 бит битмап
    #33407239
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дай догадаюсь ? пишешь для СМ 1420 векторного дисплея на краснодарской версии С ?
...
Рейтинг: 0 / 0
Преобразоване 24 бит битмап
    #33407724
tors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автордай догадаюсь ? пишешь для СМ 1420 векторного дисплея на краснодарской версии С ?

Не пишу на 5 билдере для обныкновенного дисплея для рентгенаппарта
он выдает чернобелую картинку но 24 битную
и надо её в 8 битную(256 градаций ссерого)
тады она будет в три раза меньше занимать на диске - а качество тоже бут(я надеюсь)
C ув. Tors
...
Рейтинг: 0 / 0
Преобразоване 24 бит битмап
    #33407814
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tors автордай догадаюсь ? пишешь для СМ 1420 векторного дисплея на краснодарской версии С ?

Не пишу на 5 билдере для обныкновенного дисплея для рентгенаппарта
он выдает чернобелую картинку но 24 битную
и надо её в 8 битную(256 градаций ссерого)
тады она будет в три раза меньше занимать на диске - а качество тоже бут(я надеюсь)
C ув. Tors
Берешь делаешь палитру из 256 градаций серого. Первый индекс в палитре - (0,0,0), второй - (1,1,1), последний - (256,256,256). Потом скнируешь полноцвеный битмар, и каждый писель конвертируешь в индекс в этой палитре. Надо обратить внимание, что среднее арифметическое красной, синей и зеленой составляющей подойдет плохо - глаз очень чувствителен к зеленому, менее чувствителен к красному и очень слабо реагирует на синий, так что надо эти компоненты брать в пропорции (если не изменяет память) Red - две доли, Green - семь долей, Blue - одна доля.
...
Рейтинг: 0 / 0
Преобразоване 24 бит битмап
    #33407865
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще одна формула

Brightness = 0.3*Red + 0.59*Green + 0.11*Blue

Для хранения картинок я бы посоветовал использовать
формат PNG. Или более модный вариант - j2k (JPEG2000)
со сжатием lossless. Не знаю, есть ли исходники С++
на свободном доступе, но для Java - мне удалось скачать
приличный кодек.
...
Рейтинг: 0 / 0
Преобразоване 24 бит битмап
    #33408513
Фотография rrrrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для PNG есть хорошая бесплатная компонента - pngimage143 c torry.net, принцип работы - как с TJPEGImage:
Код: plaintext
1.
2.
my_png := TPngObject.Create;
my_png.Assign(my_bimap);
my_png.SaveToFile('c:\test.png');
...
Рейтинг: 0 / 0
Преобразоване 24 бит битмап
    #33455798
tors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал такой код:
struct TRGB
{
BYTE b,g,r;
};

TRGB *ptr;
TRGB px;
const int w=InBmp->Width;
const int h=InBmp->Height;
OutBmp=new Graphics::TBitmap();
OutBmp->PixelFormat=pf8bit;
OutBmp->Width=w;
OutBmp->Height=h;


BYTE **mas;
mas = new BYTE *[w];
BYTE tmp;
for(int i=0;i<w;i++)
{
mas =new BYTE[h];
}
for(int y=0;y<h;y++)
{
ptr=(TRGB *)InBmp->ScanLine[y];
for(int x=0;x<w;x++)
{
px=ptr[x];
tmp=(px.r+px.g+px.b)/3;
mas[x][y]=tmp;

}
}

typedef struct {
TLogPalette lpal;
TPaletteEntry dummy[256];
} LogPal;

LogPal GrayPal;
GrayPal.lpal.palVersion = 0x300;
GrayPal.lpal.palNumEntries = 256;
//Заполняем палетту серым веществом
PALETTEENTRY *pe=GrayPal.lpal.palPalEntry;
for(int i=0; i < 256; i++)
{
pe.peRed=i;
pe.peGreen=i;
pe.peBlue=i;
pe.peFlags=0;
}
//Прицепляем патетту к битмапу
OutBmp->Palette=CreatePalette(&GrayPal.lpal);

// Получаем адрес на массив пикселов DIB секции битмапа
::BITMAP bmp = { 0 };
GetObject(OutBmp->Handle,sizeof(::BITMAP),&bmp);

//копируем из своего массива байтов в битмап
memcpy(bmp.bmBits,mas,w*h);

OutImage->Picture->Bitmap->Assign(OutBmp);
OutBmp->SaveToFile("c:\\1.bmp");
for(int x=0;x<w;x++)
{
delete mas[x];
}
delete [] *mas;

Фигня получается
C ув. Tors
...
Рейтинг: 0 / 0
Преобразоване 24 бит битмап
    #33455800
tors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходный битмап
C ув. Tors
...
Рейтинг: 0 / 0
Преобразоване 24 бит битмап
    #33455804
tors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То шо получается
C ув. Tors
...
Рейтинг: 0 / 0
Преобразоване 24 бит битмап
    #33461374
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://astronomy.swin.edu.au/~pbourke/dataformats/bitmaps/
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Преобразоване 24 бит битмап
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]