Hilfe mit ScanLine usw.
-
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.