Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2004-06-26

Re: [OBORONA-SPAM] WinAPI|Delphi Спящий моник

Прив, 2071434-comp,

Saturday, June 26, 2004, 10:35:11 PM, Вами написано:

B> -=[ 26 июня 2004 г. # суббота # 18:34:29 # GMT+0200 ]=-
B> Привет!

B> Как с помощью WinAPI или Delphi загнать монитор в спящий режим (режим энергосбрержения)
B> ???

Говорят что:
SendMessage(HWND_BroadCast, WM_Syscommand, sc_monitorpower,0) Включить
SendMessage(HWND_BroadCast, WM_Syscommand, sc_monitorpower,-1) Выключить

   2004-06-26 20:45:26 (#179004)

WinAPI|Delphi Спящий моник

-=[ 26 июня 2004 г. # суббота # 18:34:29 # GMT+0200 ]=-
Привет!

Как с помощью WinAPI или Delphi загнать монитор в спящий режим (режим энергосбрержения)
???

   -=[-B0╝MaN-]=- 2004-06-26 20:16:51 (#178981)

Re: Масштабирование картинки в памяти

[25.06.2004 14:22] Обнаружено письмо от Victor V. Vakchturov
[25.06.2004 14:22] Тема "Масштабирование картинки в памяти"

VVV> Здравствуйте !

VVV> Гы ! Типа счас буду писать конструктивную критику :)

>> CDC export_dc(::CreateCompatibleDC(::GetWindowDC(m_hWnd)));

VVV> Мда... А возвращаемые значения принципиально не проверяются
VVV> (типа там, если CreateCompatibleDC или GetWindowDC NULL вернут) ?
Хочется сначала сделать just work, а потом уже work well :)
К тому же хочется минимизировать код, убрать все не имеющее отношение
к проблеме.

>> unsigned char *export_bits = new unsigned char[m_export_width *
>> m_export_height * 4];

VVV> Формула совсем не всегда верна. Надо вычислять так :
VVV> ((m_export_width * cClrBits + 31) & ~31) / 8 * m_export_height, где
VVV> cClrBits - бит на пиксел (в твоем случае - 32)
А чем хуже (m_export_width * m_export_height * 4 + 4), если что
максимум запасных байт, на всякий случай ;).

>> CBitmap oldBitmap = export_dc.SelectBitmap(export_bitmap);
VVV> наверно тут CBitmap *pOldBitmap = ...
VVV> ^ надо ?
Я под WTL пишу, CBitmap используется только как контейнер. Переписал
код на чистый WinAPI, результат такой же. Т.е. проблема не в WTL.

>> export_dc.FillRect(CRect(15,15, 35,35),
>> ::CreateSolidBrush(COLORREF(0x00ff00)));

VVV> Здесь будет происходить утечка ресурсов (дескриптор, возвращаемый
VVV> CreateSolidBrush просто теряется) - надо такие вещи DeleteObject
VVV> делать.
Угу, я это делаю в деструкторе (2м аргументом у меня m_bg_color).

>> //export_dc.SelectBitmap(oldBitmap);

VVV> То же... надо : export_dc.SelectBitmap(*pOldBitmap);

>> BITMAPINFO bitmap_info = {{sizeof(BITMAPINFO), m_export_width,
>> m_export_height,
>> 1, 32, BI_RGB, 0, 0, 0, 0, 0},
>> {255,0,0,0}};
VVV> Гм... А зачем тут RGBQUAD вставлять ? Тут же 32 бит изображение ?

Я уже все перепробывал, кроме того :

typedef struct tagBITMAPINFO { // bmi
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;

>> export_bitmap.GetDIBits(export_dc,0, m_export_height, .........
>> // сохраняем export_bits в файл

VVV> Нда... а заголовок кто за Вас сохранит ?
VVV> Про BITMAPFILEHEADER что нибудь читали ?
У меня всегда 32 бит, и сохраняю я все это в jpeg, в правильности
сохранения я уверен. В других местах строчка:

Jpeg::FileExporter(ConvertBSTRToString(filename), m_export_width, \
m_export_height, (unsigned char*)export_bits);

работает нормально.

>> После сохранения в файл получаю черную картинку с правильным
>> квадратиком, но не зеленого цвета, а чб шума.
>> Все что можно перепробывал .. вообще голова отказывается варить :(

VVV> Я же давал ссылку :
VVV> http://softmaker.fatal.ru/sources/vc/graphics/WinToFile.zip (28.3 kb).
VVV> Просто скачай и изучи функции созранения в файл.
У меня она не заработала. Файл создала, но Windows Picture and Fax
Viewer пишет drawing failed, при попытке открыть файл.

Если честно, то я не разобрался до конца в этом коде.

VVV> Если посмотреть в MSDN - там такого куча (есть прямо классы для работы
VVV> с DIB). Поищи по словам "Storing Image". Или поищи "CreateBMPFile",
VVV> "CreateBitmapInfoStruct".
Мне нужно это обязательно сделать на чистом WinAPI, максимум WTL.

на WinAPI HDC export_dc = ::CreateCompatibleDC(::GetWindowDC(NULL));
if(!export_dc) throw Error("cant get compatible dc");

HBITMAP exp_bmp = ::CreateCompatibleBitmap(export_dc, m_export_width, m_export_height);
if(!exp_bmp) throw Error("cant create compatible bitmap");

unsigned char *export_bits = new unsigned char[m_export_width * \
m_export_height * 4 + 4];

BITMAPINFO bitmap_info;
memset(&bitmap_info, 0, sizeof(BITMAPINFO));

// обрежем как нада
bitmap_info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

bitmap_info.bmiHeader.biWidth = m_export_width;
bitmap_info.bmiHeader.biHeight = m_export_height;
bitmap_info.bmiHeader.biPlanes = 1;
bitmap_info.bmiHeader.biBitCount = 32;
bitmap_info.bmiHeader.biCompression = BI_RGB;

HBITMAP oldBitmap = (HBITMAP)::SelectObject(export_dc, exp_bmp);

// m_bg_color == 0x00ff00
::FillRect(export_dc, CRect(15,15, 60,60), m_bg_color);

int scan_lines = ::GetDIBits(export_dc, exp_bmp, 0, \
m_export_height, export_bits, &bitmap_info, DIB_RGB_COLORS);
if(!scan_lines)
throw Error("cant get any scanline from export dc");

::BitBlt(::GetWindowDC(NULL), 0, 0, m_export_width,\
m_export_height, export_dc, 0, 0, SRCCOPY);

::SelectObject(export_dc, oldBitmap);

delete[] export_bits;
конец Код рисует в углу окно черный квадрат с квадратиком залитым
двухцветной заливкой, с приближенной яркостью сделаной смешиванием
черных и белых пикселей. Ну должно же быть нормально :(

С пожеланием доброго времени суток,
Олень Элмо

JabberID: da.el***@j*****.ru

Номер выпуска : 3321
Возраст листа : 278 (дней)
Количество подписчиков : 432
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/178612
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписать : mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   Elmo 2004-06-26 02:54:32 (#178612)