Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скриншот на Winapi 
:(
    Опции темы
nuclearpartizan
Дата 3.2.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 29.1.2007

Репутация: нет
Всего: нет



Делаю скриншот из своей программы таким образом:

Цитата
Код

procedure ScreenShot(const Width, Height: LongInt; const Filename: string); 
var 
Bih: TBitmapInfoHeader; 
Bfh: TBitmapFileHeader; 
CDC, DC: HDC; 
CBmp: HBitMap; 
Bmp: Pointer; 
BmpInfo: TBitMapInfo; 
F, Size, Written: LongWord; 

begin 
DC := GetDC(0); 
CDC := CreateCompatibleDC(DC); 

Bih.biSize := SizeOf(TBitmapInfoHeader); 
Bih.biWidth := Width; 
Bih.biHeight := Height; 
Bih.biPlanes := 1; 
Bih.biBitCount := GetDeviceCaps(DC, BITSPIXEL) * GetDeviceCaps(DC, PLANES); 
if Bih.biBitCount = 32 then Bih.biBitCount := 24; 

Size := 3 * Width * Height; 
Bfh.bfType := $4D42; 
Bfh.bfOffBits := SizeOf(TBitmapFileHeader) + SizeOf(TBitmapInfoHeader); 

BmpInfo.bmiHeader := Bih; 
CBmp := CreateDIBSection(DC, BmpInfo, 0, Bmp, 0, 0); 
SelectObject(CDC, CBmp); 
StretchBlt(CDC, 0, 0, Width, Height, DC, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), SRCCOPY); 

F := CreateFile(PChar(Filename), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0); 
WriteFile(F, Bfh, SizeOf(TBitmapFileHeader), Written, nil); 
WriteFile(F, Bih, SizeOf(TBitmapInfoHeader), Written, nil); 
WriteFile(F, Bmp^, Size, Written, nil); 
CloseHandle(F); 
end;


Все отлично работает. Но размер скрина получается ~1,5mb
Можно как-то уменьшить размер файла без использования модулей jpeg, graphics? Размер программы критичен


PM MAIL   Вверх
Sartorius
Дата 3.2.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



В инфохеадере biCompression установи,какая понравиться.
PM MAIL ICQ   Вверх
Alexeis
Дата 12.2.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Цитата(Sartorius @  3.2.2007,  15:27 Найти цитируемый пост)
В инфохеадере biCompression установи,какая понравиться.


Это вообще к чему сказано? Там может быть только заначения 0 = BI_RGB или 3  = BI_BITFIELDS

nuclearpartizan, можно использовать ZLIB. Скрины обычно хорошо жмуться.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Sartorius
Дата 12.2.2007, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



Цитата

Это вообще к чему сказано? Там может быть только заначения 0 = BI_RGB или 3  = BI_BITFIELDS

 Почему ты так решил? 

Цитата

biCompression 
Specifies the type of compression for a compressed bottom-up bitmap (top-down DIBs cannot be compressed). This member can be one of the following values. Value Description 
BI_RGB An uncompressed format. 
BI_RLE8 A run-length encoded (RLE) format for bitmaps with 8 bpp. The compression format is a 2-byte format consisting of a count byte followed by a byte containing a color index. For more information, see Bitmap Compression.  
BI_RLE4 An RLE format for bitmaps with 4 bpp. The compression format is a 2-byte format consisting of a count byte followed by two word-length color indexes. For more information, see Bitmap Compression. 
BI_BITFIELDS Specifies that the bitmap is not compressed and that the color table consists of three DWORD color masks that specify the red, green, and blue components, respectively, of each pixel. This is valid when used with 16- and 32-bpp bitmaps. 
BI_JPEG Windows 98/Me, Windows 2000/XP: Indicates that the image is a JPEG image. 
BI_PNG Windows 98/Me, Windows 2000/XP: Indicates that the image is a PNG image. 


 При рисовании в контексте памяти все должно сразу сжиматься. Или я чего-то не понимаю?
PM MAIL ICQ   Вверх
Alexeis
Дата 12.2.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Цитата(Sartorius @  12.2.2007,  19:40 Найти цитируемый пост)
Почему ты так решил? 

  Потому что значения BI_RLE8, BI_RLE4 - возможны только для битмапов 256 цветов и 16 цветов соответственно,  а это случается только если "полетел" драйвер видюхи или комп является музейным экспонатом. Что касается BI_JPEG, BI_PNG так этих друзей поддерживают только некоторые принтеры, и те устройства, которые поддерживают способны лишь выводить на печать, поток сжатых данных, но ни в коем случае не сжимать их. Об это так прямо и написано, в соседних разделах справки. Винда может только извлечь поток и передать принтеру, но не больше. Потому остаются только BI_RGB и BI_BITFIELDS.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
RinOSpro
Дата 28.8.2007, 10:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











И еще вопросик что эта процедура в цикле не работает?? Записывается только заголовок что не так. Я и sleep выставлял но не пашет
  Вверх
Addmin
Дата 30.8.2007, 10:28 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 3.2.2006
Где: сослан в Сибирь

Репутация: 1
Всего: 15



nuclearpartizan, обратите внимание на KOL, раз уж размеры программ так критичны smile С Bmp или Jpg вы маленького размера не получите никогда - он совершенно не приспособлен под это. Рекомендую с KOL покопаться в сторону PNG или GIF

www.kolnmck.ru


--------------------
PM MAIL   Вверх
Snowy
Дата 30.8.2007, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Addmin, ты тупишь.
PM MAIL   Вверх
try_to_get
Дата 1.9.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 426
Регистрация: 19.3.2007
Где: Россия

Репутация: нет
Всего: 2



Можно написать свой алгоритм сжатия.


--------------------
Алгоритм не роскошь, а средство достижения цели!
user posted image
PM MAIL   Вверх
ne0n
Дата 1.9.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 4
Всего: 11



Цитата(try_to_get @  1.9.2007,  19:43 Найти цитируемый пост)
Можно написать свой алгоритм сжатия.

Имхо не разумно! а может еще придумать свой формат изображения?!(это риторический вопрос)
PM MAIL ICQ   Вверх
try_to_get
Дата 1.9.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 426
Регистрация: 19.3.2007
Где: Россия

Репутация: нет
Всего: 2



ne0n, я просто привел пример, а решать nuclearpartizan писать или нет. smile 


--------------------
Алгоритм не роскошь, а средство достижения цели!
user posted image
PM MAIL   Вверх
ne0n
Дата 1.9.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 4
Всего: 11



Цитата(try_to_get @  1.9.2007,  20:49 Найти цитируемый пост)
ne0n, я просто привел пример, а решать nuclearpartizan писать или нет.  


врятли ему поможет твой совет smile ты бы посмотрел на дату его поста и количество сообщений...
PM MAIL ICQ   Вверх
try_to_get
Дата 1.9.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 426
Регистрация: 19.3.2007
Где: Россия

Репутация: нет
Всего: 2



ne0n, Он "умер" что ли?


--------------------
Алгоритм не роскошь, а средство достижения цели!
user posted image
PM MAIL   Вверх
ne0n
Дата 1.9.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 4
Всего: 11



Цитата(ne0n @  1.9.2007,  21:18 Найти цитируемый пост)
врятли ему поможет твой совет  ты бы посмотрел на дату его поста и количество сообщений...


подумай!
PM MAIL ICQ   Вверх
Addmin
Дата 2.9.2007, 05:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 3.2.2006
Где: сослан в Сибирь

Репутация: 1
Всего: 15



Snowy, мда, вероятно. Вопросик то устарел smile Но всё равно - формат BMP очень неэкономичен, тем более для сохранения такого изображения, как рабочий стол. Наилучшим соотношением качество\размер для подобных изображений является формат PNG. Кто не верит - может скачать FastStone Capture (www.faststone.org) и поэкспериментировать smile


--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1235 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.