Hilfe mit ScanLine usw.



  • Gesucht hab ich schon, war aber nicht so gut.
    Ich guck mal ob ich die Hilfe bei borland downloaden kann.
    Wenns sonst probleme gibt komm ich. 😃



  • Original erstellt von <BCB-Coder>:
    Ich guck mal ob ich die Hilfe bei borland downloaden kann.

    Hi,
    warum ? Ist die bei dir nicht dabei?

    Was hast du für einen Compiler?

    MFG

    Alexander Sulfrian



  • Ich hab BCB6 Enterprise.
    Leider hab ichs nur auf Minimal installiert, weil paar dateien zur
    Vollinstallation fehlen.

    Bei Borland konnte ich nur Die Hilfe dateien von BCB3 downloaden,
    da gabs aber kein ScanLine. Das gibts vielleicht erst seit BCB5 oder BCB6.



  • Gibts irgendwo BCB5 oder BCB6 Hilfe auf Deutsch zum download?



  • Nein. Du kannst dich aber sicher direkt an Borland Deutschland wenden und um eine Ersatz-CD bitten, gegen Vorlage des Kaufbeleges oder der Original-CDnatürlich.

    Falls Beleg oder CD "vom Hund gefressen" wurden oder "beim Umzug verloren gegangen" sind, dann hast du schlicht und einfach Pech und musst zusehen, wie du klarkommst. Ich hoffe, der Hinweis war verständlich? 😉



  • Ich hab da ne kleine Frage, es gibt ja TBitmap.
    Gibts TBitmap auch als VCL komponente oder nur durch Graphics::TBitmp???

    Danke!



  • Nimm halt TImage. Dessen Picture::Bitmap ist auch vom Typ TBitmap.



  • Meine eigentliche Frage:

    Ich möchte mit einer TBitmap variable eine Datei öffnen.
    Dann mit ScanLine die pixel schreiben und das Bild dann in
    eine PaintBox kopieren dass das Bild sichtbar ist.

    Nur bekomme ich mit ScanLine eine Fehlermeldung "Index of ScanLine out
    of range".

    Wie mach ich das?

    Danke.



  • zeig doch mal her was du bisher mit scanline gemacht hast.



  • Graphics::TBitmap* bmp = new Graphics::TBitmap;
    
    void LoadBMP()
    {
        bmp->PixelFormat = pf24bit;
        bmp->LoadFromFile("C:\\WINDOWS\\Feder.bmp"); //Zum Beispiel
    
        int x, y, xpix, ypix;
    
        for(x=0; x<bmp->Width; x+=8)
            {
                for(y=0; y<bmp->Height; y+=6)
                    {
                        xpix = bmp->ScanLine[x];
                        ypix = bmp->ScanLine[y];
                    }
            }
    }
    

    Ich weiß nicht wie ich es auf ne PaintBox zeichnen kann. 😞



  • @BCB-Coder

    Der Indexfehler ist normal!!! Du greifst falsch auf Scanlines zu!
    Das Image hat Heigt x Zeilen zu je
    Width * Farbtiefe(in Byte) x FarbBytes!

    bei pf24Bit sind das 3 * Width Byte pro Zeile!

    ScanLine liefert einen Pointer auf das Byte- Array einer Zeile!

    .
        .
        .
        .
        bmp->PixelFormat=pf24Bit;
        bmp->LoadFromFile("C:\\WINDOWS\\Feder.bmp"); //Zum Beispiel
        .
        .
        .
        PRGBTriple srcRow;
        PRGBTriple dstRow;
        TBitmap *Result=new Graphics::TBitmap;
        Result->Width = bmp->Width;
        Result->Height = bmp->Height;
        Result->PixelFormat = pf24bit;
        for (int ySrc = bmp->Height - 1;ySrc>=0; ySrc--)
        {
          srcRow = (PRGBTriple)bmp->ScanLine[ySrc];
          dstRow = (PRGBTriple)Result->ScanLine[ySrc];//Result ist ein TBitmap!
          for (int xSrc = bmp->Width - 1;xSrc >= 0; xSrc--)
          {
            dstRow[xSrc] = srcRow[xSrc];
            dstRow[xSrc].rgbtBlue=(dstRow[xSrc].rgbtBlue*Bright) / 100;
            dstRow[xSrc].rgbtGreen=(dstRow[xSrc].rgbtGreen*Bright) / 100;
            dstRow[xSrc].rgbtRed=(dstRow[xSrc].rgbtRed*Bright) / 100;
          }
        }
        //in Result sollte nun das Bild stehen mit 50% Helligkeit!
        //Nun kann Result in irgendein Canvas kopiert werden!
        delete Result;
        Image2->Picture->Bitmap->Assign(Result);
    

    PS: Ist nur 'n Demo zu ScanLines



  • Original erstellt von DerAltenburger:
    **```cpp
    //in Result sollte nun das Bild stehen mit 50% Helligkeit!
    //Nun kann Result in irgendein Canvas kopiert werden!
    delete Result;
    Image2->Picture->Bitmap->Assign(Result);

    Hi,
    ups! Sollte wohl eher umgekehrt sein! Also delete nach Assign!

    MFG

    Alexander Sulfrian



  • Original erstellt von Alexander Sulfrian:
    **Hi,
    ups! Sollte wohl eher umgekehrt sein! Also delete nach Assign!

    **

    Stimmt irgendwie! 🕶

    Das mit Assign sollte eigentlich ganz 'raus. Das Delete ist hier eingefuegt. War ein Stueck von ner umfangreicheren Routine... 🙄



  • Danke. Ich werds mal ausprobieren. 🙂


Anmelden zum Antworten