<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Neue Seite 1</title>
</head>
<body>
<p>Hallo, Ich hab hier ein Bitmap in einem TImage angezeigt. Das Bitmap muß pixelweise untersucht und bearbeitet werden, das
dauert natürlich ziemlich lange. Um anzuzeigen, wie weit das Programm gerade ist, möchte ich die Pixel einfärben und
den Bildschirm aktualisieren. Klar: dann dauert das Ganze noch ein wenig länger, das spielt aber keine Rolle. Die Eigenschaft
IncrementalDisplay hab ich vor der Schleife auf true gesetzt, muß aber trotzdem Form->Update(); aufrufen. Und nun flackert es wie
verrückt, weil er das ganze Bild neu aufbaut. Wie krieg ich die VCL dazu, nur den soeben geänderten Teil des Bildes zu aktualisieren?</p>
<p>Danke, und einen schönen Sonntag noch... </p>
<p>Günther</p>
<pre> </pre>
<pre>void __fastcall TImageForm::SpeedButton3Click(TObject *Sender)
{
Image1->IncrementalDisplay=true;
for(int y=0; y<Image1->Height; y++)
{
for(int x=0; x<Image1->Width; x++)
{
int dummy=1;
switch(Image1->Canvas->Pixels[x][y])
{
case clBlack:for(int xx=-1; xx<2; xx++)
for(int yy=-1; yy<2; yy++)
{
if((Image1->Canvas->Pixels[x+xx][y+yy]==clWhite)
|(Image1->Canvas->Pixels[x+xx][y+yy]==clYellow))
{
dummy=0;
break;
}
}
if(dummy==1) Image1->Canvas->Pixels[x][y]=clRed;
break;
case clWhite:Image1->Canvas->Pixels[x][y]=clYellow;
break;
}
}
ImageForm->Update();
}
for(int y=0; y<Image1->Height; y++)
{
for(int x=0; x<Image1->Width; x++)
{
switch(Image1->Canvas->Pixels[x][y])
{
case clRed:
case clYellow:Image1->Canvas->Pixels[x][y]=clWhite;
break;
}
}
ImageForm->Update();
}
Image1->IncrementalDisplay=false;
}</pre>
</body>
</html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Neue Seite 1</title>
</head>
<body>
<p>Hallo, Ich hab hier ein Bitmap in einem TImage angezeigt. Das Bitmap muß pixelweise untersucht und bearbeitet werden, das
dauert natürlich ziemlich lange. Um anzuzeigen, wie weit das Programm gerade ist, möchte ich die Pixel einfärben und
den Bildschirm aktualisieren. Klar: dann dauert das Ganze noch ein wenig länger, das spielt aber keine Rolle. Die Eigenschaft
IncrementalDisplay hab ich vor der Schleife auf true gesetzt, muß aber trotzdem Form->Update(); aufrufen. Und nun flackert es wie
verrückt, weil er das ganze Bild neu aufbaut. Wie krieg ich die VCL dazu, nur den soeben geänderten Teil des Bildes zu aktualisieren?</p>
<p>Danke, und einen schönen Sonntag noch... </p>
<p>Günther</p>
<pre> </pre>
<pre>void __fastcall TImageForm::SpeedButton3Click(TObject *Sender)
{
Image1->IncrementalDisplay=true;
for(int y=0; y<Image1->Height; y++)
{
for(int x=0; x<Image1->Width; x++)
{
int dummy=1;
switch(Image1->Canvas->Pixels[x][y])
{
case clBlack:for(int xx=-1; xx<2; xx++)
for(int yy=-1; yy<2; yy++)
{
if((Image1->Canvas->Pixels[x+xx][y+yy]==clWhite)
|(Image1->Canvas->Pixels[x+xx][y+yy]==clYellow))
{
dummy=0;
break;
}
}
if(dummy==1) Image1->Canvas->Pixels[x][y]=clRed;
break;
case clWhite:Image1->Canvas->Pixels[x][y]=clYellow;
break;
}
}
ImageForm->Update();
}
for(int y=0; y<Image1->Height; y++)
{
for(int x=0; x<Image1->Width; x++)
{
switch(Image1->Canvas->Pixels[x][y])
{
case clRed:
case clYellow:Image1->Canvas->Pixels[x][y]=clWhite;
break;
}
}
ImageForm->Update();
}
Image1->IncrementalDisplay=false;
}</pre>
</body>
</html>
Comment