Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2019, 00:56   #1
DEAD MOROSE
Новичок
Джуниор
 
Регистрация: 21.03.2016
Сообщений: 2
По умолчанию Масштабирования изображения в памяти

Здравствуйте, уважаемые форумчане.
Есть задача масштабировать bmp-файл. Без вывода на экран. Просто преобразовать массив данных одного размера в другой размер. Вроде есть функция StretchBlt, но она для масштабирования на экран. Может есть какой-нибудь способ применить её для работы с памятью или имеются АПИшные функции для данной задачи?
DEAD MOROSE вне форума Ответить с цитированием
Старый 13.01.2019, 02:51   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от DEAD MOROSE Посмотреть сообщение
Вроде есть функция StretchBlt, но она для масштабирования на экран.
Он для масштабирование на контекст.
p51x вне форума Ответить с цитированием
Старый 13.01.2019, 11:23   #3
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

cx,cy - новые размеры изображения

Код:
memdc=CreateCompatibleDC(hdc);				//создать контекст, совместимый с экраном
HBITMAP hbmp=CreateCompatibleBitmap(hdc,cx,cy);	//создать совместимую с экраном битовую карту
SelectObject(memdc,hbmp);					//выбрать ее в контекст
StretchBlt(memdc,0,0,cx,cy,.....);
и дальше работаете с memdc
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 13.01.2019, 16:59   #4
DEAD MOROSE
Новичок
Джуниор
 
Регистрация: 21.03.2016
Сообщений: 2
По умолчанию

Спасибо. Попробую
DEAD MOROSE вне форума Ответить с цитированием
Старый 22.01.2019, 18:16   #5
GreyScall
Пользователь
 
Аватар для GreyScall
 
Регистрация: 01.01.2011
Сообщений: 29
По умолчанию

Используйте «GDI+» – умеет грузить из файла, умеет сохранять в файл, поддерживает режимы интерполяции и прозрачность (с претензиями, но в основном).

Примерный набросок:
Код:
Uses
      GDIPAPI,
      GDIPOBJ,
      GDIPUTIL;

...

Function CalcLetterBox(Const Width: Integer; Const Height: Integer; Const LetterBox: Integer): TSize;
Begin
Result.cx:=LetterBox;
Result.cy:=LetterBox;
If (Width<>Height) Then
      If (Width>Height) Then
            Result.cy:=Round(Height/Width*LetterBox)
      Else
            Result.cx:=Round(Width/Height*LetterBox);
End;

Procedure TForm1.Button1Click(Sender: TObject);
Var encoderID: Integer; encoderClsid: TGUID; Image: TGPImage; Size: TSize; Bitmap: TGPBitmap; Graphics: TGPGraphics;
Begin
encoderID:=GetEncoderClsid('image/png', encoderClsid);
If (encoderID>=0) Then
      Begin
      Image:=TGPImage.Create('C:\...\file.jpg');
      Size:=CalcLetterBox(Image.GetWidth, Image.GetHeight, 200);
      Bitmap:=TGPBitmap.Create(Size.cx, Size.cy, Image.GetPixelFormat);
      Graphics:=TGPGraphics.Create(Bitmap);
      Graphics.SetInterpolationMode(InterpolationModeHighQualityBicubic);
      Graphics.SetSmoothingMode(SmoothingModeNone);
      Graphics.SetPixelOffsetMode(PixelOffsetModeHalf);
      Graphics.DrawImage(Image, 0, 0, Size.cx, Size.cy);
      Bitmap.Save('C:\...\file.png', encoderClsid, Nil);
      FreeAndNil(Graphics);
      FreeAndNil(Bitmap);
      FreeAndNil(Image);
      End;
End;
Regards, GreyScall.
GreyScall вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изображения не освобождаются из памяти после удаления factually Общие вопросы Delphi 4 08.11.2016 13:23
Алгоритм масштабирования изображения(х1, х2, х3...) DENIS_POLOTSK C# (си шарп) 6 28.05.2012 21:35
Задача - найти объём памяти, который требуется для хранения изображения Александр95 Помощь студентам 5 13.10.2011 20:17
Алгоритм масштабирования Alex Cones Свободное общение 4 25.05.2010 16:02