Hallo Manfred X,
ich habe mal jetzt dein Code so übernommen und habe keine Fehler enthalten, d.h. es müsste so klappen. Sieht auch logisch aus.
Nun habe ich mit dein Code auch andere Subs überarbeitet was auch sehr gut geklappt hat.
Aber eine Variable möchte sich nicht richtig verhalten. Könntest du vielleicht mir da weiter helfen?
Es ist die scr was rot unterstrichen wird.
Hier der Orginale aus dem C#
private void PreprocessInputImage( BitmapData data, int width, int height, _
byte[] buf )
{
int stride = data.Stride;
int offset = stride - width * 3;
int len = (int)( ( width - 1 ) / 8 ) + 1;
int rem = ( ( width - 1 ) % 8 ) + 1;
int[] tmp = new int[len];
int i, j, t1, t2, k = 0;
unsafe
{
byte * src = (byte *) data.Scan0.ToPointer( );
for ( int y = 0; y < height; )
{
// collect pixels
Array.Clear( tmp, 0, len );
// calculate
for ( i = 0; ( i < 8 ) && ( y < height ); i++, y++ )
{
// for each pixel
for ( int x = 0; x < width; x++, src += 3 )
{
// grayscale value using BT709
tmp[(int) ( x / 8 )] += (int)( 0.2125f * src[RGB.R] + 0.7154f * _
src[RGB.G] + 0.0721f * src[RGB.B] );
}
src += offset;
}
// get average values
t1 = i * 8;
t2 = i * rem;
for ( j = 0; j < len - 1; j++, k++ )
buf[k] = (byte)( tmp[j] / t1 );
buf[k++] = (byte)( tmp[j] / t2 );
}
}
} und das von mir überarbeitete VB Code
Private Sub PostprocessInputImage(data As BitmapData, width As Integer, height _
As Integer, buf As Byte())
Dim stride As Integer = data.Stride
Dim offset As Integer = stride - width * 3
Dim len As Integer = CInt((width - 1) / 8) + 1
Dim lenWM1 As Integer = len - 1
Dim lenHM1 As Integer = CInt((height - 1) / 8)
Dim [rem] As Integer = ((width - 1) Mod 8) + 1
Dim i As Integer, j As Integer, k As Integer
'Das Array für die Pixel-Bytes der Bitmap erstellen
Dim bytes(stride * height * 1) As Byte
'Kopieren der Bild-Pixel in das Array
System.Runtime.InteropServices.Marshal.Copy(data.Scan0, bytes, 0, _
bytes.Length)
Dim scr As Integer = -1
' for each line
For y As Integer = 0 To height - 1
i = (y / 8)
' for each pixel
Dim x As Integer = 0
While x < width
j = x / 8
k = i * len + j
' check if we need to highlight moving object
If buf(k) = 255 Then
' check for border
If ((x Mod 8 = 0) AndAlso ((j = 0) OrElse (buf(k - 1) = _
0))) OrElse ((x Mod 8 = 7) AndAlso ((j = lenWM1) OrElse ( _
buf(k + 1) = 0))) OrElse ((y Mod 8 = 0) AndAlso ((i = 0) _
OrElse (buf(k - len) = 0))) OrElse ((y Mod 8 = 7) AndAlso _
((i = lenHM1) OrElse (buf(k + len) = 0))) Then
src(RGB.R) = 255
End If
End If
x += 1
src += 3
End While
src += offset
Next
End Sub danke im Voraus
Olaf |