Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Уменьшение размера фотки на канве

16K
12 сентября 2008 года
iRain
72 / / 12.03.2008
Я переношу из Битмапа картинку на канву другого объекта, размер которой в оригинале 1200х1600 (например), надо уменьшить размер картинки до 150х200 и на этойже канве расположить еще одну картинку.
92
12 сентября 2008 года
Тень Пса
2.2K / / 19.10.2006
StretchDraw
16K
15 сентября 2008 года
iRain
72 / / 12.03.2008
Хорошая функция, вроде бы как и решает проблему, но нет! Очень сильно искажает изображение.
Подскажите либо что нить другое, либо как сохранить качество изображения!
288
15 сентября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: iRain
Хорошая функция, вроде бы как и решает проблему, но нет! Очень сильно искажает изображение.
Подскажите либо что нить другое, либо как сохранить качество изображения!



Тогда ищите какие-нибудь библиотеки по работе с растровой графикой, допустим CxImage. Со стандартными функциями GDI, насколько я знаю, приемлемого результата при масштабировании изображения добиться довольно сложно.

14
16 сентября 2008 года
Phodopus
3.3K / / 19.06.2008
..Или используйте GDI+
8.4K
20 сентября 2008 года
Zor
104 / / 23.04.2006
простая функция сжатия картинки
на входе битмап WxHx24bit + коэф.сжатия, на выходе - сжатая картинка. Сжимает вцелое число раз.
работает шустро, качество сравнимо с фотошопом :)

Код:
void __fastcall TMainForm::ReduceColor (Graphics::TBitmap *Src, Graphics::TBitmap *Dst, int Zoom)
{
int W = Src->Width / Zoom;
int H = Src->Height / Zoom;
Dst->Width = W;
Dst->Height = H;
Dst->PixelFormat = pf24bit;
for (int y = 0, ty1 = 0; y < H; y++, ty1 += Zoom)
  {
  byte* PDst = (byte*) Dst->ScanLine[y];
  for (int x = 0, tx1 = 0; x < W; x++, tx1 += Zoom)
    {
    int R = 0, G = 0, B = 0, Count = 0, tx2 = tx1 + Zoom, ty2 = ty1 + Zoom, Index = 3 * tx1;
    for (int ty = ty1; ty < ty2; ty++)
      {
      byte* PSrc = ((byte*) Src->ScanLine[ty]) + Index;
      for (int tx = tx1; tx < tx2; tx++)
        {
        B += PSrc[0]; G += PSrc[1]; R += PSrc[2]; PSrc += 3;
        Count++;
        }
      }
    PDst[0] = B / Count; PDst[1] = G / Count; PDst[2] = R / Count; PDst += 3;
    }
  }
}
//---------------------------------------------------------------------------
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог