![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с выводом на канву
CodeMaster © (2008-12-11 21:41:00)Здраствуйте Мастера: Не могу понять почему у меня не выводится изображение на канву. Через BiTBlt
var
BackBitmap,Bm1,Bm2: TBitmap;
FrameWidth,FrameHeight: Integer;
begin
BackBitmap:= TBitmap.Create;
BackBitmap.Handle:= LoadImage(0,PCHar(FileName),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
//FileName здесь имя файла
FrameWidth:= BackBitmap.Width div FrameCount;
//FrameCount - здесь кол-во кадров
FrameHeight:= BackBitmap.Height;
Bm1:= TBitmap.Create;
Bm2:= TBitmap.Create;
Bm1.Width:= FrameWidth;
Bm1.Height:= FrameHeight;
Bm2.Width:= FrameWidth;
Bm2.Height:= FrameHeight;
BitBlt(Bm1.Canvas.Handle,0,0,FrameWidth,FrameHeight,BackBitmap.Canvas.Handle,0,0 ,SRCCOPY);
BitBlt(Bm1.Canvas.Handle,0,0,FrameWidth,FrameHeight,BackBitmap.Canvas.HandleFram eWidth,0,SRCCOPY);
//Процедура вызова вывода графики
procedure ...(var Bm1,Bm2: TBitmap);
BitBlt(Canvas.Handle,0,0,FrameWidth,FrameHeight,Bm1.Canvas.Handle,0,0,SRCCOPY );
//Здесь находится цикл плавного перехода изображения в другое
BitBlt(Canvas.Handle,0,0,FrameWidth,FrameHeight,Bm2.Canvas.Handle,0,0,SRCCOPY);
Выделенные строки почему-то отказываются работать хотя если использовать
Canvas.Draw(0,0,Bm1);
............
Canvas.Draw(0,0,Bm2);
Всё работает...
Пожалуйста помогите мне разобраться в этой неразберихе
{RASkov} (2008-12-12 17:00:00) [1]> [9] codemaster © (12.12.08 16:06)
Да.
codemaster (2008-12-12 16:06:00) [2]{RASkov} © (12.12.08 11:17) [6]
У тебя работает и с Draw и с BitBlt?
{RASkov} (2008-12-12 12:48:00) [3]> [7] antonn © (12.12.08 12:32)
Но этож Width и height выводимой(копируемой) картинки... Думаю, автору об этом известно....)
Они даже не определены(нет описания).... в [5], хотя в [0] присутствуют, но толку от них тоже - 0)
antonn (2008-12-12 12:32:00) [4]FrameWidth,FrameHeight не заданы
{RASkov} (2008-12-12 11:17:00) [5]> [5] CodeMaster © (12.12.08 10:39)
Работает же и с Draw и с BitBlt....
CodeMaster (2008-12-12 10:39:00) [6]procedure TPOGiButton.Morphing(var Bm1,Bm2: TBitmap);
const
count = 250;
var
i: integer;
x, y: integer;
bm: TBitMap;
p1, p2, p: PByteArray;
c: integer;
k: integer;
begin
bm := TBitMap.Create;
Bm.Width:= Bm1.Width;
Bm.Height:= Bm1.Height;
bm.PixelFormat := pf24bit;
bm1.PixelFormat := pf24bit;
bm2.PixelFormat := pf24bit;
Canvas.Draw(0,0,bm1); //BitBlt(Canvas.Handle,0,0,FrameWidth,FrameHeight,
//Bm1.Canvas.Handle,0,0,SRCCOPY);
//Неработающая процедура
for i := 1 to count - 1 do
begin
for y := 0 to bm.Height - 1 do
begin
p := bm.ScanLine[y];
p1 := bm1.ScanLine[y];
p2 := bm2.ScanLine[y];
for x := 0 to bm.Width * 3 - 1 do
p^[x] := round((p1^[x] * (count - i) + p2^[x] * i) / count);
end;
Canvas.Draw(0,0,bm); //BitBlt(Canvas.Handle,0,0,FrameWidth,FrameHeight,Bm.Canvas.Handle,0,0,SRCCOPY);
//Неработающая процедура
Application.ProcessMessages;
if Application.Terminated then
break;
end;
Canvas.Draw(0,0,Bm2);
//BitBlt(Canvas.Handle,0,0,FrameWidth,FrameHeight,Bm2.Canvas.Handle,0,0,SRCCOPY);
//Неработающая процедура
bm.Destroy;
end;
{RASkov} (2008-12-11 23:00:00) [7]> [2] CodeMaster © (11.12.08 22:49)
Я пытался понять структуру кода в [0] так и не понял.... вот я о чем :(
Я бы проверил и может быть попробывал бы найти ошибку или найти причину, но...
Набросай пример, что бы можно было скопировать отсюда, подставив в него только имена файлов с картинками.
Так-же укажи форматы и размеры картинок....
А так.... ну может кто и подскажет.... может тут и не так все сложно как кажется :)
antonn (2008-12-11 23:00:00) [8]попробуй битмапам задать вручную pixelformat
CodeMaster (2008-12-11 22:49:00) [9]
> {RASkov} © (11.12.08 22:46) [1]
> > [0] CodeMaster © (11.12.08 21:41)
>
> С таким вопросом, т.е. с такой его постановкой можно долго
> ответа ждать...
Cуть вопроса состоит в том, что я не могу разобраться почему методом Canvas.Draw выводит а BiTBlt нет, Хотя все параметры верны.
{RASkov} (2008-12-11 22:46:00) [10]> [0] CodeMaster © (11.12.08 21:41)
С таким вопросом, т.е. с такой его постановкой можно долго ответа ждать...