ScanLine (C++)
Description
This example shows how to draw directly to a Bitmap. It loads a bitmap from a file and then copies it to another bitmap twice its size. Then the two bitmaps are displayed on the form canvas.
Code
#include <memory> //For STL auto_ptr class
void __fastcall TForm1::Button1Click(TObject *Sender)
{
std::auto_ptr<Graphics::TBitmap> Bitmap(new Graphics::TBitmap);
std::auto_ptr<Graphics::TBitmap> BigBitmap(new Graphics::TBitmap);
TRGBTriple *ptr, *bigPtr; // Use a (byte *) for pf8bit color.
TPixelFormat pixForm, bigpixForm;
try
{
Bitmap->LoadFromFile("../littlefac.bmp");
pixForm = Bitmap->PixelFormat;
bigpixForm = BigBitmap->PixelFormat;
Bitmap->PixelFormat = pf24bit;
BigBitmap->PixelFormat = pf24bit;
BigBitmap->Height = Bitmap->Height * 2;
BigBitmap->Width = Bitmap->Width * 2;
for (int y = 0; y < Bitmap->Height; y++)
{
ptr = reinterpret_cast<TRGBTriple *>(Bitmap->ScanLine[y]);
for (int x = 0; x < Bitmap->Width; x++)
{
int bx = x * 2;
int by = y * 2;
bigPtr = reinterpret_cast<TRGBTriple *>(BigBitmap->ScanLine[by]);
bigPtr[bx] = ptr[x];
bigPtr[bx + 1] = ptr[x];
bigPtr = reinterpret_cast<TRGBTriple *>(BigBitmap->ScanLine[by + 1]);
bigPtr[bx] = ptr[x];
bigPtr[bx + 1] = ptr[x];
}
}
Canvas->Draw(0, 0, Bitmap.get());
Canvas->Draw(200, 200, BigBitmap.get());
}
catch (...)
{
ShowMessage("Could not load or alter bitmap");
}
}
Uses
- Vcl.Graphics.TBitmap.ScanLine ( fr | de | ja )
- Vcl.Graphics.TGraphic.Height ( fr | de | ja )
- Vcl.Graphics.TGraphic.Width ( fr | de | ja )
- Vcl.Graphics.TBitmap.PixelFormat ( fr | de | ja )