2 dimensionales array verschieben -> grenzwertiges Problem

  • VB6

    2 dimensionales array verschieben -> grenzwertiges Problem

    also, ich habe folgendes Bild ( das Programm soll dan später mit ähnlichen bildern arbeiten die unterschiedlich gedreht sind):


    dieses bild möchte ich nun "drehen"

    da mir die ganzen Lösungen die es zum thema drehen giebt zu aufgebauscht waren hab ich mir da selber was überlegt.

    und zwar teile ich das Bild in 2 Hälften. 4 Funktionen erledigen das "drehen".
    links hoch, rechts runter und
    links runter, rechts hoch

    damit das ganze passt (normalerweise würde man ja mit einem festen Wert die ganze Seite des bildes verschieben) hab ich mir ne nette kleine mathematische Formel gebastelt:

    z1=z- (x2*tan(z/x1))

    mit den ganzen variablen sieht dass dann so aus:

    Quellcode

    1. z = straight - ((x - 1) * Tan(straight / 101))

    das ist die Funktion für die linke Seite, für rechts:

    Quellcode

    1. z = ((x - 1) * Tan(straight / ((bm.bmWidth - 1) - 101))) - straight


    und hir die ganze Funktion (für das Verschieben nach oben der linken Seite):

    Quellcode

    1. Public Sub upleft(straight As Integer)
    2. Dim bm As Bitmap
    3. GetObject Picture1.Image, Len(bm), bm
    4. z = 0
    5. For y = 0 To bm.bmHeight - 1
    6. For x = (bm.bmWidth / 2) - 1 To left1 Step -1
    7. If ImageData(0, x, y) = 255 And ImageData(1, x, y) = 255 And ImageData(2, x, y) = 255 Then
    8. SetPixel Picture1.hDC, x, y, 0
    9. SetPixel Picture1.hDC, x, y - z, RGB(ImageData(0, x, y), ImageData(1, x, y), ImageData(2, x, y))
    10. End If
    11. z = straight - ((x - 1) * Tan(straight / 101))
    12. Next
    13. z = straight
    14. Next
    15. End Sub


    Mein Problem ist nun im Grenzwert dieser Funktion, die Stelle wo die Pixel eigentlich nicht mehr verschoben werden dürften weil der z wert zu klein ist.

    In der Mitte ensteht nämlich so etwas:


    Der weiße "strich" wird größer je mehr pixel sich in diesem Grenzbereich aufhalten.
    Dieser "strich" stört in der weiteren Verarbeitung ungemein.
    Darum die frage: warum? und wie krieg ich diesen Strich weg?

    (und ja, mir ist bewusst dass die buchstaben je nach anfangswinkel sehr schräg werden können. Das hab ich aber schon durchdacht, die lösung ist nur irrelevant für mein Problem.)