Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга о KOL.doc
Скачиваний:
29
Добавлен:
30.04.2019
Размер:
1.77 Mб
Скачать

2.19.3. Загрузка и сохранение (tBitmap)

LoadFromFile( s ) - загружает изображение из файла типа BMP. Данный метод не может выполнять загрузку сжатых (RLE-кодированных) изображений;

LoadFromFileEx( s ) - загружает изображение из файла BMP, аналогично предыдущему методу, но понимает, в том числе, и загрузку RLE-кодированных изображений;

SaveToFile( s ) - сохраняет изображение в файл в формате BMP;

LoadFromStream( strm ) - загружает изображение из потока (с текущей позиции в потоке, и до конца изображения). Загрузка RLE-кодированных изображений данным методом не выполняется;

LoadFromStreamEx( strm ) - то же, что и предыдущий метод, но в том числе загружает и RLE-кодированные изображения;

SaveToStream( strm ) - записывает изображение в поток в формате BMP;

LoadFromResourceID( inst, resID ) - загружает изображение из ресурса приложения или другого исполнимого файла (что определяется параметром inst), по числовому идентификатору ресурса resID;

LoadFromResourceName( inst, s ) - загружает изображение из ресурса по имени ресурса;

CopyToClipboard - копирует изображение в буфер обмена Windows;

PasteFromClipboard - вставляет изображение из буфера обмена.

2.19.4. Рисование изображения на ином контексте (tBitmap)

D

Заметьте, что примененный в KOL подход полностью противоречит тому, что сделано в этом плане в VCL. Но это не в KOL все сделано вверх ногами, а в библиотеке VCL, все наизнанку. Там канва «рисует» графические объекты вроде TBitmap, т.е. она заранее должна «знать», по крайней мере, о существовании некоего абстрактного прародителя TPicture для всех таких объектов, и обращаться для выполнения данной операции к его виртуальному (и фактически, абстрактному методу Draw). В KOL же не нужен ни абстрактный метод, ни фиктивный прародитель для всех «рисуемых» объектов, и вообще, для рисования графического объекта на канве вовсе не обязательно иметь эту канву инкапсулированной в объект – достаточно иметь дескриптор DC, т.е. просто 32-разрядное значение.

raw( DC, X, Y ) - рисует свое изображение на указанном контексте DC (Device Context типа hDC) с указанной координаты (X, Y), без изменения масштаба;

StretchDraw( DC, R ) - рисует свое изображение на указанном контексте устройства DC, вписывая его (масштабируя) в прямоугольник R. Дополнительная информация: для того, чтобы масштабирование изображения было плавным, необходимо для DC использовать API-функцию SetStretchBltMode( DC, halftone );

DrawTransparent( DC, X, Y, C ) - рисует свое изображение на контексте DC аналогично методу Draw, но при этом цвет C считается "прозрачным" и пропускается (т.е. в соответствующих точках прежнее изображение на устройстве остается нетронутым);

StretchDrawTransparent( DC, X, Y, C ) - аналогично StretchDraw, но считая при этом цвет C "прозрачным";

DrawMasked( DC, X, Y, maskBmp ) - другой вариант прозрачного рисования, при котором параметр maskBmp типа hBitmap используется как маска (черный цвет в маске соответствует прозрачным областям, которые не попадут в целевой контекст). Данный метод работает быстрее, и позволяет оптимизировать быстродействие для многократной отрисовки того же самого изображения, если маску приготовить заранее;

StretchDrawMasked( DC, R, maskBmp ) - аналогично предыдущему, но после применения маски изображение масштабируется по размерам прямоугольника R, прежде чем быть изображенным на целевом контексте;

Convert2Mask( C ) - конвертирует изображение в монохромную маску, считая C прозрачным цветом (соответствующие области становятся черными, все остальные пиксели в маске - белыми);