Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.25;
Скачать: CL | DM;

Вниз

Проблема с выводом на канву   Найти похожие ветки 

 
CodeMaster ©   (2008-12-11 21:41) [0]

Здраствуйте Мастера: Не могу понять почему у меня не выводится изображение на канву. Через 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-11 22:46) [1]

> [0] CodeMaster ©   (11.12.08 21:41)

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


 
CodeMaster ©   (2008-12-11 22:49) [2]


> {RASkov} ©   (11.12.08 22:46) [1]
> > [0] CodeMaster ©   (11.12.08 21:41)
>
> С таким вопросом, т.е. с такой его постановкой можно долго
> ответа ждать...

Cуть вопроса состоит в том, что я не могу разобраться почему методом Canvas.Draw выводит а BiTBlt нет, Хотя все параметры верны.


 
{RASkov} ©   (2008-12-11 23:00) [3]

> [2] CodeMaster ©   (11.12.08 22:49)

Я пытался понять структуру кода в [0] так и не понял.... вот я о чем :(
Я бы проверил и может быть попробывал бы найти ошибку или найти причину, но...
Набросай пример, что бы можно было скопировать отсюда, подставив в него только имена файлов с картинками.
Так-же укажи форматы и размеры картинок....
А так.... ну может кто и подскажет.... может тут и не так все сложно как кажется :)


 
antonn ©   (2008-12-11 23:00) [4]

попробуй битмапам задать вручную pixelformat


 
CodeMaster ©   (2008-12-12 10:39) [5]

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-12 11:17) [6]

> [5] CodeMaster ©   (12.12.08 10:39)

Работает же и с Draw и с BitBlt....


 
antonn ©   (2008-12-12 12:32) [7]

FrameWidth,FrameHeight не заданы


 
{RASkov} ©   (2008-12-12 12:48) [8]

> [7] antonn ©   (12.12.08 12:32)

Но этож Width и height выводимой(копируемой) картинки... Думаю, автору об этом известно....)
Они даже не определены(нет описания).... в [5], хотя в [0] присутствуют, но толку от них тоже - 0)


 
codemaster ©   (2008-12-12 16:06) [9]

{RASkov} ©   (12.12.08 11:17) [6]
У тебя работает и с Draw и с BitBlt?


 
{RASkov} ©   (2008-12-12 17:00) [10]

> [9] codemaster ©   (12.12.08 16:06)

Да.



Страницы: 1 вся ветка

Текущий архив: 2009.01.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
6-1196354544
Crystalis
2007-11-29 19:42
2009.01.25
как перехватить пакетик ? ;)


4-1204631197
Dmitry S
2008-03-04 14:46
2009.01.25
LDAP


15-1227878192
Jeer
2008-11-28 16:16
2009.01.25
FoxBase


2-1229321648
SUN
2008-12-15 09:14
2009.01.25
Действия с датами


2-1228993138
cvg
2008-12-11 13:58
2009.01.25
Как сделать строчку или символ в memo жирным?