Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Вниз

Ненормальный TCanvas   Найти похожие ветки 

 
debuger ©   (2004-09-22 21:33) [0]

Впервые встретил такое, что TCanvas.Pixels[ i, j ] возвращает -1. В хэлпе вычитал, что это в том случаэ когда DC, не поддержывает данную фичу, дословно - ему на нее просто...(все поняли).
Каким тогда образом мне пикселы с канваса вычитать.

И еще один глюк:
Есть TImage, я на евго канвасе чего-то рисую, конечно же не забываю TImage.Repaint. И все хорошо, до того момента пока не потягаю форму по экрану, после этого имага залипает и не обновляется. Что это?


 
Рыба ©   (2004-09-22 21:48) [1]

У тебя ошибка в программе.


 
Mihey_temporary ©   (2004-09-22 22:37) [2]

Код, нужен код и больше кода. Не бойся, мы не воруем программы, но если интересное программерское решение - возьмём на заметку.


 
MBo ©   (2004-09-23 07:49) [3]

If the position is outside the clipping rectangle, reading the value of Pixels returns -1.


 
debuger ©   (2004-09-23 14:20) [4]

2 MBo >> Not every device context supports the Pixels property. Reading the Pixels property for such a device context will return a value of -1. Setting the Pixels property for such a device context does nothing.

Теперь код:
procedure Work;
begin
 repeat
   framesPerSecond := GetTickCount;

   Processing( FMain.PVideoView.Handle );

   framesPerSecond := GetTickCount - framesPerSecond;
   fmain.lbl1.caption := "fps: " + inttostr( framesPerSecond );

   FMain.PVideoView.Repaint;
   FMain.IVideoView.Repaint;
   FMain.IDebugView1.Repaint;
   FMain.IDebugView2.Repaint;

   Application.ProcessMessages;

   FMain.SITakeSnapShotClick( FMain );
 until false;
end;

Раниться эта процедурка так:
 BeginThread( nil, 0, @Work, nil, 0, threadID );

procedure Processing( handle: HWND );
begin
 // подготовка и передача кадра
 PrepareWorkCanvas( handle );

 // передача управления
 ImageProcessing;
end;

procedure PrepareWorkCanvas( handle: HWND );
begin
 workDC := GetDC( handle );
 currentFrame.Handle := workDC;

 BitBlt ( currentFrame.Handle, 0, 0, mapSize.width, mapSize.height, workDC, 0, 0, SRCCOPY );
 
 FMain.IVideoView.Canvas.CopyRect( videoRect, currentFrame, videoRect );
 GetImage( SI_CURRENTSHOT, FMain.IVideoView.Canvas );

 ReleaseDC( handle, workDC );
end;

procedure GetImage( mapID: byte; canvas: TCanvas );
var
 i, j: byte;
begin
 // локаем канвас, чтобы никакая падла туда не писала
 //FMain.IDebugView2.canvas.TryLock;

 // попиксельно получаем карту

 // уменьшение центральный выбор
 for i := 0 to mapSize.width do
   for j := 0 to mapSize.height do
     begin
       map[ mapID ][ i, j ] := ColorGScale( canvas.Pixels[ i * reductionRate, j * reductionRate ] );
     end;
end;


 
programania ©   (2004-09-23 20:25) [5]

>debuger
Насчет pixel=-1
Это когда старший бит=1 или 4-ый байт цвета<>0
возможно тот кто записал этот цвет использовал его как alpha канал, попробуй его просто обнулить: pixels[i,j] and $FFFFFF;


 
debuger ©   (2004-09-23 20:38) [6]

У-у-у. Вы о чем? Для кого я вырезку их хэлпа постил в самом начале предидущей мессаги?

я спрашиваю почему осыпаеться мой канвас? тот что FMain.IVideoView.Canvas
FMain - TForm
IVideoView - TImage

function ColorG3Scale( col: tclolor): byte;
begin
 result := col and $FF;
end;



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

Форум: "Media";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.044 c
1-1101906999
6h
2004-12-01 16:16
2004.12.19
Изменение иконки любого приложения


4-1099323488
Alexey_Trofimov
2004-11-01 18:38
2004.12.19
Отключить мышь или чтоб его небыло видно


1-1101850354
Mega
2004-12-01 00:32
2004.12.19
Обмен сообщениями между MDIParent и MDIChild


14-1100500058
Cobalt
2004-11-15 09:27
2004.12.19
Больные депутаты


1-1101980982
PURGEN
2004-12-02 12:49
2004.12.19
Tedit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский