Форум: "Media";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];
ВнизФункция BitBlt Найти похожие ветки
← →
reticon (2003-02-02 20:12) [0]Подскажите пожалуйста пример работы функции BitBlt (нужен код функции).
← →
Mihey (2003-02-02 20:49) [1]Пжлста:
function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: Longint): Bool;
DestDC
Контекст устpойства, пpинимающего каpту бит. Имеется ввиду контекст (handle) канвы (canvas), на которую копируется изображение. Например, если изображение выводится на форму, то указывается контекст канвы формы, а именно: Form.Canvas.Handle. Для изображений TBitMap аналогично: BitMap.Canvas.Handle, но никак не BitMap.Handle.
X, Y
Координаты верхнего левого угла прямоугольной области, в которую выводится изображение. Проще говоря, координаты изображения.
Width, Height
Ширина и высота прямоугольной области, в которую выводится изображение. Если хотите вывести изображение целиком, то указывайте его настоящие размеры (постоянные или определённые по свойствам Width и Height). Вообще, X, Y, Width, Height вместе похожи на структуру TRect, которая используется в определении той же области вывода изображения в функции Draw объекта TCanvas.
SrcDC
Контекст устpойства, из котоpого копиpуется каpта бит, или нуль для pастpовой опеpации только на DestDC. Здесь, аналогично DestDC, указывается Handle объекта TCanvas изображения, которое будет скопировано на (именно "на", а не "в", т.к. речь идёт о копировании по битам) DestDC. В то же время, вы можете указать в этом параметре нуль, и на DestDC в зависимости от растровой операции (см. ниже) выведется прямоугольная область указанных в параметрах Width и Height размеров.
XSrc, YSrc
Веpхний левый угол SrcDC. Поясняю: прямоугольник размера Width и Height с координатами XSrc и YSrc будет копироваться из SrcDC в DestDC, причём в прямоугольник тех же размеров с координатами X и Y. Значит, если вы хотите просто вывести изображение, то указывайте здесь нули (XSrc = 0 и YSrc = 0). Если у вас большое изображение, и на на DestDC вы хотите вывести только его часть, то воспользуйтесь свойствами XSrc, YScr и Width, Height, и определите, какую именно. Если SrcDC = 0, то и XSrc = 0, YSrc = 0.
Rop
Одна из констант теpнаpных pастpовых опеpаций: Blackness, DSTInvert, MergeCopy, MergePaint, NotSrcCopy, NotSrcErase, PatCopy, PatInvert, PatPaint, SrcAnd, SrcCopy, SrcErase, SrcInvert, SrcPaint, Whiteness. Этот параметр отвечает за то, как SrcDC будет спроецировано DestDC. SrcCopy выполняет пpостое копиpование из источника в назначение.
← →
reticon (2003-02-02 23:41) [2]<< To Mihey
Спасибо большое, вроде помогло.
Но а если у меня SrcDC - файл .jpg?
Если делаю так
...
BMP:=TBitmap.Create;
...
SrcDC:=MainForm.BMP.Canvas.Handle;
...
то все нормально, а у JPG канваса нету, выходит так, что-ли?
← →
Mihey (2003-02-03 00:12) [3]Нет, не совсем так. TPicture может загружать JPEG файлы, так как использует TGraphic. Загрузив JPEG картинку в TPicture ты теперь можешь обратиться к канве свойства Bitmap:
MyPic := TPicture.Create;
MyPic.LoadFromFile("SomeJPG.jpg");
SrcDC := MyPic.Bitmap.Canvas.Handle;
Ведь всё равно все форматы в загруженном виде хранятся в BMP.
← →
reticon (2003-02-03 03:13) [4]Делаю так:
...
var MyPic: TPicture;
...
MyPic := TPicture.Create;
MyPic.LoadFromFile("SomeJPG.jpg");
SrcDC := MyPic.Bitmap.Canvas.Handle;
...
Не знаю, но почему-то этот способ не хочет работать :-(
Работает только через TBitmap, (SomeBMP.bmp)
а если через TJPEGImage - тоже лажа какая-то
← →
Mihey (2003-02-03 21:28) [5]Ссори, забыл добавить - надо в Uses написать модуль jpeg. Иначе не работает:
Uses Windows, SomeShit, Jpeg, Messages;
← →
reticon (2003-02-04 08:05) [6]2Mihey
Я же говорю что не в этом проблема, Жпег я подключал.
Проблема, мне кажется в использовании JPEG с TPicture.
Да и еще, насколько я знаю, жпег, по-моему, не в тему в TGraphic,
там ведь только bmp, wmf, и ico.
← →
Mihey (2003-02-04 20:22) [7]Да, пока ещё в Delphi с JPEG не гладко. Но вот выход:
procedure TForm1.Button1Click(Sender: TObject);
var
jp: TJpegImage; //Незабудь про "jpeg" в "uses".
Pic: TBitMap;
begin
jp := TJpegImage.Create;
Pic := TBitMap.Create;
jp.LoadFromFile("C:\logo.jpg");
Pic.Assign(jp);
jp.Free;
BitBlt(Canvas.Handle, 0, 0, Pic.Width, Pic.Height, Pic.Canvas.Handle, 0, 0, SrcCopy);
end;
Этот код работает. А ещё я подумал, что если открывать изображения методами TImage, то Bitmap будет содержать желаемое изображение.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c