Hilfe mit ScanLine usw.
-
Ja, LoadFromFile. Das ist aber nicht mein problem.
Meine Frage ist, ob mir jemand zeigen kann wie das mit ScanLine
funktioniert und dann auf das TPaintBox zeichnet.
-
Die PaintBox stellt dir einen Canvas zur Verfügung, auf dem du mit den TCanvas-Methoden herummalen kannst. Unter anderem kannst du auch den Bitmap-Canvas auf die PaintBox kopieren, die Methoden sind alle in der Hilfe beschrieben. Und die Suchfunktion hier im Forum dürfte auch jede Menge Threads zum Thema liefern.
ScanLine brauchst du dafür jedenfalls nicht.
-
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.