Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: C# : цвета картинки  (Прочитано 15121 раз)
0 Пользователей и 1 Гость смотрят эту тему.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« : 07-09-2005 11:10 » 

Есть картинка в бмп формате.
Можно ли как-то считать какие цвета используются, и заменить их на другие ?
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 07-09-2005 11:26 » 

скольки битная?

если 24 или 32 битная - то без палитры. (тут заменить цвет можно только попиксельно)
если <24 бит - то с палитрой. Тогда нужно заменить цвет в палитре

формат БМП сейчас не вспомню, но там ничего сложного - можно нарыть в сети
Записан

MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #2 : 07-09-2005 12:00 » 

скольки битная?
24
формат БМП сейчас не вспомню, но там ничего сложного - можно нарыть в сети
Что то я ничего не нахожу именно на шарпе Жаль
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 07-09-2005 12:34 » 

не знаю что такое шарп Улыбаюсь , но вывод - заменять цвет попиксельно.

проще всего - в БМП - там заголовок (повторяю - не помню какой, завтра скажу), там размер заголовка, смещение, где пикселы начинаются etc.

найти где начались данные -  и заменить

(я сейчас ухожу, но на скорую руку вырезка из проекта в VC )

Код:
//рисуем
  BITMAPFILEHEADER* pBmpFileHeader;
  BITMAPINFOHEADER* pBmpInfoHeader;
  BITMAPINFO* pBmpInfo;

pBmpFileHeader=(BITMAPFILEHEADER*)byBmpFile;
pBmpInfoHeader=(BITMAPINFOHEADER*)(byBmpFile+sizeof(BITMAPFILEHEADER));
pBmpInfo=(BITMAPINFO*)byBmpFile;

BYTE* pPixels=byBmpFile+((BITMAPFILEHEADER*)byBmpFile)->bfOffBits;

W=pBmpInfoHeader->biWidth;
H=pBmpInfoHeader->biHeight;


WORD BitCount=pBmpInfoHeader->biBitCount;

tempDC.CreateCompatibleDC(pFurtherDC);

//tempBmp.CreateCompatibleBitmap(pDC,W,H);

pBMP->DeleteObject();
pBMP->CreateCompatibleBitmap(pFurtherDC,W,H);
oldbmp=tempDC.SelectObject(pBMP);


//смотрим, сколько бит
switch(BitCount)
{

...
...
case 24:
{
//это я брал вроде из MSDN
//The bitmap has a maximum of 2^24 colors, and the bmiColors member of
//BITMAPINFO is NULL. Each 3-byte triplet in the bitmap array represents
//the relative intensities of blue, green, and red, respectively, for a
//pixel. The bmiColors color table is used for optimizing colors used on
//palette-based devices, and must contain the number of entries specified
//by the biClrUsed member of the BITMAPINFOHEADER.

int div=4;
int ost=(W*3)%div;
int delta=ost?div-ost:0;

DWORD rgb;
BYTE *r=pPixels+2;
BYTE *g=pPixels+1;
BYTE *b=pPixels+0;
int h,w;

for(h=H-1;h>=0;h--)
{
for(w=0;w<W;w++)
{
rgb=((*b)<<16)| ((*g)<<8)|(*r);
tempDC.SetPixel(w,h,rgb);
r+=3;g+=3;b+=3;
}
r+=delta;
g+=delta;
b+=delta;
}
result=true;
}
...
...

}


тут я копировал пикселы из BMP я рисовал на контекст tempDC

думаю это поможет разобраться Улыбаюсь

всё, я убёг по домам
Записан

MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #4 : 07-09-2005 12:37 » 

не знаю что такое шарп Улыбаюсь , но вывод - заменять цвет попиксельно.
Шарп - это C# Улыбаюсь Язык такой программирования под .NET Framework Улыбаюсь
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #5 : 08-09-2005 04:24 » new

В общем разобрался Улыбаюсь
Вот, если интересно Улыбаюсь
Код:
this._image = (Bitmap)Image.FromFile(@"C:\image.bmp");
this._imageGraphics = Graphics.FromImage(this._image);

ColorMap[] colorSwapper= new ColorMap[2];
colorSwapper[0] = new ColorMap();
colorSwapper[1] = new ColorMap();
colorSwapper[0].OldColor = Color.Blue; // цвет который будем менять
colorSwapper[0].NewColor = Color.Yellow; // цвет на который меняем
colorSwapper[1].OldColor = Color.Black;  // цвет который будем менять
colorSwapper[1].NewColor = Color.Green; // цвет на который меняем

ImageAttributes imageAttr = new ImageAttributes();
imageAttr.SetRemapTable(colorSwapper); 
this._imageGraphics.DrawImage(this._image, new Rectangle(0, 0,
                              this._image.Width, this._image.Height),0, 0, this._image.Width,
                              this._image.Height, GraphicsUnit.Pixel, imageAttr);
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 08-09-2005 04:41 » 

Улыбаюсь
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines