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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2011, 19:19   #1
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию Копирование изображения

Код:
  Hbmp:=LoadImage(HInstance,
                    PChar('мой путь'),
                    IMAGE_BITMAP,
                    0,0,
                    LR_LOADFROMFILE or LR_CREATEDIBSECTION);
  SendMessage(Parent,STM_SETIMAGE,IMAGE_BITMAP,Result);
Я загрузил бмп и в Hbmp его хэндл. Делаю потом так:
Код:
procedure Pixelization(BmpHDC:HBITMAP);
var
MemoryHDC:HDC;
MemoryDevice:HGDIOBJ;
begin
MemoryHDC:=CreateCompatibleDC(BmpHDC);
MemoryDevice:=SelectObject(MemoryHDC,MainWnd); //MainWnd - хэндл окна программы
BitBlt(MemoryDevice,0,0,1024,768,MemoryHDC,0,0,SRCCOPY);
DeleteObject(MemoryDevice);
ReleaseDC(MainWnd,MemoryHDC);
end;
Подскажите почему не выводится изображение в окно, или я его только в память считал? (Вообще запутался с этими DC)
Вообще нужно скопировать изображение в буффер, там его поменять, отправить в другой буффер, откуда перезаписать в новый файл, или в старый. Может поможет кто советом?
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 01.02.2011, 20:18   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
procedure DrawOnHWND(h:THandle;b:HBITMAP);
var temp,wnd:HDC;
begin
 wnd:=GetDC(h);
 temp:=CreateCompatibleDC(wnd);
 SelectObject(temp,b);
 BitBlt(wnd,0,0,1024,768,temp,0,0,SRCCOPY);
 DeleteDC(temp);
 ReleaseDC(wnd);
end;
это нарисовать битмап, или вам что надо то?(я руководствовался вашим кодом)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.02.2011, 22:20   #3
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Прошу прощения за поздний ответ. Ваш код безупречно работает, это хорошо, спасибо за это. Посоветуйте как лучше сделать. Я загрузил на форму *.bmp (код приведен выше), получил массив цветов этой картинки, загнал его в указатель, планирую поменять некоторые пиксели и записать этот массив цветных пикселей в существующий (открытый файл) или в новый файл. С помощью чего это лучше сделать? Просто скопировать заголовки этого файла и заменить его палитру? (при этом пользователь должен видеть, что получилась за картинка) Для отображения обязательно использовать эти девайс контексты? Если можете посоветовать толковый мануал по ним, посоветуйте пожалуйста, я понимаю, что мсдн рулит (это безусловно), но я устал читать по-английски. Или вот по-другому вопрос поставлю: есть массив пикселей из 3-х составляющих (РГБ), нужно его скопировать в контекст (правильно?). А потом из него уже в файл?
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 01.02.2011 в 22:25.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 02.02.2011, 01:24   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если есть уже массив то можно через CreateBitmap создать HBITMAP.
кстати, а чем TBitmap не угодил?
Цитата:
Если можете посоветовать толковый мануал по ним, посоветуйте пожалуйста, я понимаю, что мсдн рулит (это безусловно), но я устал читать по-английски.
не могу, ибо я достаточно хорошо владею английским.
Цитата:
С помощью чего это лучше сделать? Просто скопировать заголовки этого файла и заменить его палитру?
можно и этим методом(вашим, с получением полного массива данных битмапа), а можно с помощью контекста и SetPixel/ScanLine/GetPixels and SetPixels
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.02.2011, 05:39   #5
GreyScall
Пользователь
 
Аватар для GreyScall
 
Регистрация: 01.01.2011
Сообщений: 29
Лампочка

Цитата:
Если можете посоветовать толковый мануал по ним, посоветуйте пожалуйста, я понимаю, что мсдн рулит (это безусловно), но я устал читать по-английски.
Ну так читайте по-русски...

P.S. CreateDIBSection, GetObject, GetDIBits, SetDIBits.
Regards, GreyScall.
GreyScall вне форума Ответить с цитированием
Старый 02.02.2011, 10:05   #6
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Да вот я просто без VCL пишу, учусь так сказать понимать основы (на чем библиотеки стандартные держутся, а то, разобрать библиотеку Graphics нереально, а вот узнать через вин апи - вполне). Вобщем спасибо, мужики, за ответы, буду разбираться.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование изображения из буфера обмена. yuran666666 Win Api 2 24.02.2010 13:39
Копирование изображения Superlotles Помощь студентам 1 18.12.2009 15:44
Чтение изображения из базы данных, Вместо изображения - "System.Byte[]" ruelCrow Общие вопросы .NET 3 10.07.2008 23:29
Изображения в БД alikon1 БД в Delphi 3 08.10.2007 13:13