xdarkshadowx
2012-05-04 14:21:40
I want to draw an array of TBoxes that I have built, but my bot doesn't utilize smart, so I can't use the smart_draw functions. What other options do I have?
2012-05-04 14:21:40
2012-05-04 14:43:57
#ifndef BITMAPS_H_INCLUDED#define BITMAPS_H_INCLUDED
#include "GDIPlus.h"
typedef struct
{
BYTE R, G, B;
} RGB, *PRGB;
typedef struct
{
BYTE R, G, B, A;
} RGBA, *PRGBA;
class Bitmap
{
private:
int width;
int height;
BYTE* Bits;
BITMAPFILEHEADER bFileHeader;
BITMAPINFOHEADER bInfoHeader;
BITMAPINFO Info;
protected:
HDC DC;
HBITMAP Image;
public:
~Bitmap()
{
if (Bits)
delete[] Bits;
DeleteDC(DC);
DeleteObject(Image);
}
Bitmap(int Width, int Height) : width(Width), height(Height)
{
memset(&Info, 0, sizeof(BITMAPINFO));
Info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
Info.bmiHeader.biPlanes = 1;
Info.bmiHeader.biBitCount = 32;
Info.bmiHeader.biCompression = BI_RGB;
Info.bmiHeader.biWidth = width;
Info.bmiHeader.biHeight = -height;
DC = CreateCompatibleDC(0);
Image = CreateDIBSection(DC, &Info, DIB_RGB_COLORS, (void**)&Bits, 0, 0);
SelectObject(DC, Image);
}
Bitmap(int Width, int Height, string Data) : width(Width), height(Height)
{
}
Bitmap(const char* FilePath)
{
HANDLE hFile = CreateFile(FilePath, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if (hFile == 0)
{
cout<<"Error Bitmap Does Not Exist";
return;
}
DWORD Read;
ReadFile(hFile, &bFileHeader, sizeof(bFileHeader), &Read, 0);
ReadFile(hFile, &bInfoHeader, sizeof(bInfoHeader), &Read, 0);
if (bInfoHeader.biBitCount < 32)
{
CloseHandle(hFile);
cout<<"The Image Loaded cannot be less than 32bits.";
return;
}
if (bFileHeader.bfType != 0x4D42)
{
CloseHandle(hFile);
cout<<"The File Is Not A Bitmap.";
return;
}
if (bInfoHeader.biCompression != BI_RGB)
{
CloseHandle(hFile);
return;
}
width = bInfoHeader.biWidth;
height = bInfoHeader.biHeight;
memset(&Info, 0, sizeof(BITMAPINFO));
Info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
Info.bmiHeader.biPlanes = 1;
Info.bmiHeader.biBitCount = 32;
Info.bmiHeader.biCompression = BI_RGB;
Info.bmiHeader.biWidth = width;
Info.bmiHeader.biHeight = -height;
Info.bmiHeader.biSizeImage = bInfoHeader.biSizeImage;
Bits = new BYTE[Info.bmiHeader.biSizeImage];
SetFilePointer(hFile, bFileHeader.bfOffBits, 0, FILE_BEGIN);
ReadFile(hFile, Bits, Info.bmiHeader.biSizeImage, &Read, 0);
DC = GetDC(0);
Image = CreateDIBitmap(DC, &Info.bmiHeader, CBM_INIT, Bits, &Info, DIB_RGB_COLORS);
CloseHandle(hFile);
}
bool DrawBitmap(HWND Window, Point Position = Point(0, 0))
{
HDC DContext = GetDC(Window);
if ((DContext == NULL))
return false;
HDC dcmem = CreateCompatibleDC(NULL);
if (SelectObject(dcmem, Image) == NULL)
{
DeleteObject(Image);
DeleteDC(dcmem);
return false;
}
BITMAP bm;
GetObject(Image, sizeof(bm), &bm);
if (BitBlt(DContext, Position.X, Position.Y, bm.bmWidth, bm.bmHeight, dcmem, 0, 0, SRCCOPY) == 0)
{
DeleteObject(Image);
DeleteDC(dcmem);
return false;
}
DeleteDC(dcmem);
ReleaseDC(Window, DContext);
return true;
}
bool SaveBitmap(const char* FilePath)
{
DWORD Written;
HANDLE hFile = CreateFile(FilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (hFile == 0)
{
CloseHandle(hFile);
return false;
}
if (!WriteFile(hFile, &bFileHeader, sizeof(BITMAPFILEHEADER), &Written, 0))
{
CloseHandle(hFile);
return false;
}
if (!WriteFile(hFile, &bInfoHeader, sizeof (BITMAPINFOHEADER), &Written, 0))
{
CloseHandle(hFile);
return false;
}
if (!WriteFile(hFile, Bits, bInfoHeader.biSizeImage, &Written, 0))
{
CloseHandle(hFile);
return false;
}
return true;
}
HDC ReturnDC(){return DC;}
int Width(){return width;}
int Height(){return height;}
void Size(int& Width, int& Height){Width = width; Height = height;}
};
class Pens
{
private:
HDC hDC;
HPEN NewPen;
HPEN OldPen;
public:
Pens(HDC hdc, COLORREF colour) : hDC(hdc)
{
NewPen = CreatePen(PS_SOLID, 0, colour);
OldPen = (HPEN)SelectObject (hDC, NewPen);
}
Pens(HDC hdc, DWORD Style, DWORD Width, COLORREF colour) : hDC(hdc)
{
NewPen = CreatePen(Style, Width, colour);
OldPen = (HPEN)SelectObject (hDC, NewPen);
}
~Pens()
{
SelectObject(hDC, OldPen);
DeleteObject(NewPen);
}
void ColourPixel(Point ColourPoint)
{
SetPixel(hDC, ColourPoint.X, ColourPoint.Y, ColourPoint.Color);
}
void DrawLine(Point Begin, Point End)
{
MoveToEx (hDC, Begin.X, Begin.Y, 0);
LineTo (hDC, End.X, End.Y);
}
void DrawRectangle(Box B)
{
Rectangle(hDC, B.X1, B.Y1, B.X2, B.Y2);
}
void DrawElipse(Point UpperLeftBound, Point LowerRightBound)
{
Ellipse(hDC, UpperLeftBound.X, UpperLeftBound.Y, LowerRightBound.X, LowerRightBound.Y);
}
void DrawArcAngle(Point CenterPoint, DWORD Radius, float StartAngle, float EndAngle)
{
AngleArc(hDC, CenterPoint.X, CenterPoint.Y, Radius, StartAngle, EndAngle);
}
void DrawArc(Point UpperLeftBound, Point LowerRightBound, Point ArcStartPoint, Point ArcEndPoint)
{
Arc(hDC, UpperLeftBound.X, UpperLeftBound.Y, LowerRightBound.X, LowerRightBound.Y, ArcStartPoint.X, ArcStartPoint.Y, ArcEndPoint.X, ArcEndPoint.Y);
}
void DrawArcTo(Point UpperLeftBound, Point LowerRightBound, Point ArcStartPoint, Point ArcEndPoint)
{
ArcTo(hDC, UpperLeftBound.X, UpperLeftBound.Y, LowerRightBound.X, LowerRightBound.Y, ArcStartPoint.X, ArcStartPoint.Y, ArcEndPoint.X, ArcEndPoint.Y);
}
};
class Brushes
{
private:
HDC hDC;
HBRUSH NewBrush;
HBRUSH OldBrush;
public:
Brushes(HDC hdc, COLORREF colour) : hDC(hdc)
{
NewBrush = CreateSolidBrush(colour);
OldBrush = (HBRUSH)SelectObject (hDC, NewBrush);
}
~Brushes()
{
SelectObject(hDC, OldBrush);
DeleteObject(NewBrush);
}
void ColourPixel(Point ColourPoint)
{
SetPixel(hDC, ColourPoint.X, ColourPoint.Y, ColourPoint.Color);
}
void DrawLine(Point Begin, Point End)
{
MoveToEx (hDC, Begin.X, Begin.Y, 0);
LineTo (hDC, End.X, End.Y);
}
void DrawRectangle(Box B, bool Fill = false)
{
if (!Fill)
{
DrawLine(Point(B.X1, B.Y1), Point(B.X2, B.Y1)); //Draw the Top.
DrawLine(Point(B.X1, B.Y1), Point(B.X1, B.Y2)); //Draw the Left.
DrawLine(Point(B.X2, B.Y1), Point(B.X2, B.Y2)); //Draw the Right.
DrawLine(Point(B.X1, B.Y2), Point(B.X2, B.Y2)); //Draw the Bottom.
ColourPixel(Point(B.X2, B.Y2, 0)); //Last Pixel.
}
else
Rectangle(hDC, B.X1, B.Y1, B.X2, B.Y2);
}
void DrawElipse(Point UpperLeftBound, Point LowerRightBound)
{
Ellipse(hDC, UpperLeftBound.X, UpperLeftBound.Y, LowerRightBound.X, LowerRightBound.Y);
}
void DrawArcAngle(Point CenterPoint, DWORD Radius, float StartAngle, float EndAngle)
{
AngleArc(hDC, CenterPoint.X, CenterPoint.Y, Radius, StartAngle, EndAngle);
}
void DrawArc(Point UpperLeftBound, Point LowerRightBound, Point ArcStartPoint, Point ArcEndPoint)
{
Arc(hDC, UpperLeftBound.X, UpperLeftBound.Y, LowerRightBound.X, LowerRightBound.Y, ArcStartPoint.X, ArcStartPoint.Y, ArcEndPoint.X, ArcEndPoint.Y);
}
void DrawArcTo(Point UpperLeftBound, Point LowerRightBound, Point ArcStartPoint, Point ArcEndPoint)
{
ArcTo(hDC, UpperLeftBound.X, UpperLeftBound.Y, LowerRightBound.X, LowerRightBound.Y, ArcStartPoint.X, ArcStartPoint.Y, ArcEndPoint.X, ArcEndPoint.Y);
}
};
#endif // BITMAPS_H_INCLUDED
2012-05-04 15:50:51
program new;
{$i srl/srl.simba}
{$I srl/srl/misc/debug.simba}
var
w,h,bmp :
begin
GetClientDimensions(w,h);
bmp := BitmapFromClient(1,1,w-1,h-1);
{...} // draw something to bitmap here
DebugBitmap(bmp);
end.
2012-05-05 01:48:35
2012-05-06 10:19:33
From: xdarkshadowx
But draw using what function? Sorry I'm kinda lost and ggzz's fix looks complicated :s
2012-05-06 15:15:47
From: xdarkshadowx
But draw using what function? Sorry I'm kinda lost and ggzz's fix looks complicated :s