Текущий архив: 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.47 MB
Время: 0.006 c