Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

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

Цитата:
Сообщение от DEAD MOROSE Посмотреть сообщение
Вроде есть функция StretchBlt, но она для масштабирования на экран.
Он для масштабирование на контекст.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 13.01.2019, 12:23   #3
alexcoder
Участник клуба
 
Регистрация: 31.05.2009
Сообщений: 758
Репутация: 454

skype: alexcoder1
По умолчанию

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, 17:59   #4
DEAD MOROSE
Новичок
 
Регистрация: 22.03.2016
Сообщений: 2
Репутация: 10
По умолчанию

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

icq: 484056282
skype: GreyScall
По умолчанию

Используйте «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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изображения не освобождаются из памяти после удаления factually Общие вопросы Delphi 4 08.11.2016 14: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


10:10.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.