Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с выводом на канву


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)

С таким вопросом, т.е. с такой его постановкой можно долго ответа ждать...


Наверх

Титульная страница Поиск, карта сайта Написать письмо