Тема: Bitmap
Показать сообщение отдельно
  #13  
Старый 04.06.2009, 08:01
Alex_S_S Alex_S_S вне форума
Прохожий
 
Регистрация: 07.05.2009
Сообщения: 41
Репутация: 10
По умолчанию

А вообще проблема так и не решилась. При копировании из одного Bitmap в другой происходит очень сильная потеря качества, если копирование происходит не методом Assign. Вот как делаю
Код:
B1 := TBitMap.Create;
B1.PixelFormat := pf4bit;
B1.Canvas.CopyMode:=cmSrcCopy;
B1.Monochrome := false;
B1.Transparent := false;

JpegIm := TJpegImage.Create;
JpegIm.LoadFromFile('какой то файл');
B1.Assign(JpegIm);
JpegIm.Destroy;

BitMAP := TBitMap.Create;
BitMap.PixelFormat := pf4bit;
BitMap.Monochrome := false;
BitMap.Transparent := false;

BitMap.Width := B1.Width;
BitMap.Height := B1.Height;

//BitMap.Palette := B1.Palette;                  //хоть так
BitMap.Palette := CopyPalette(B1.Palette);  //хоть так
BitMap.Canvas.CopyMode:=cmSrcCopy;

//пробовал копирование со всеми ниже перечисленными методами
//BitMap.Canvas.Draw(Round(RD.Left,RD.Top,B1);
//BitMap.Canvas.StretchDraw(RD,B1);
//BitMap.Canvas.CopyRect(RD,B1.Canvas,RS);
BitBlt(BitMap.Canvas.Handle, RD.Left, RD.Top, RD.Right, RD.Bottom, B1.Canvas.Handle, 0, 0, SRCCOPY);

B1.FreeImage;
B1.Destroy;
Admin: Пользуемся тегами!

при этом если сохранить в файл B1 он будет отличного качества, а BitMap уже плохого. Очень сильная потеря цветности и качества. Проблема как то решается если у BitMap.PixelFormat задать pf16bit и выше, но при этом изображение раздувается по размеру и вывод на канвас (перерисовка) тормозит. А иногда (при больших размерах исходного изображения) приложение вываливается "Недостаточно памяти...".

Кто соображает в графике, помогите пожалуйста. Даже не знаю в какую сторону искать.
Ответить с цитированием