Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #define DLLIMPORT extern "C" __declspec( dllexport )
- typedef struct PixelStruct {
- unsigned char blue;
- unsigned char green;
- unsigned char red;
- unsigned char alpha;
- } *PIXEL;
- typedef struct {
- //-------------------------------------
- // STRUCT 1 - RGSSBITMAP
- //-------------------------------------
- char DearCompilerIReallyDontWantThis[16];
- //DWORD flags; // char flags[4];
- //DWORD klass; // char klass[4];
- //void (*dmark)(void*); // char dmark[4];
- //void (*dfree)(void*); // char dfree[4];
- //-------------------------------------
- // STRUCT 2 - BITMAPSTRUCT
- //-------------------------------------
- struct {
- char FuckThisShit[8];
- // DWORD unk1; // char unk1[4];
- // DWORD unk2; // char unk2[4];
- //-------------------------------------
- // STRUCT 3 - RGSSBMINFO
- //-------------------------------------
- struct {
- char ReallyDontNeedThis[8];
- //DWORD unk1; // char unk1[4];
- //DWORD unk2; // char unk2[4];
- //-------------------------------------
- // STRUCT 4 - BITMAPINFOHEADER
- //-------------------------------------
- struct {
- char PLEASEJustLetMeWork[4];
- // DWORD biSize; // char biSize[4];
- long width;
- long height;
- char COMPILER_I_WILL_NOT_SAY_ANYTHING_MORE___YOU_IDIOT[28];
- // WORD biPlanes; // char biPlanes[2];
- // WORD biBitCount; // char biBitCount[2];
- // DWORD biCompression; // char biCompression[4];
- // DWORD biSizeImage; // char biSizeImage[4];
- // LONG biXPelsPerMeter; // char biXPelsPerMeter[4];
- // LONG biYPelsPerMeter; // char biYPelsPerMeter[4];
- // DWORD biClrUsed; // char biClrUsed[4];
- // DWORD biClrImportant; // char biClrImportant[4];
- } *C;
- //-------------------------------------
- // STRUCT 5 - RGBQUAD
- //-------------------------------------
- PIXEL FirstRow;
- //-------------------------------------
- // STRUCT 5 - RGBQUAD
- //-------------------------------------
- PIXEL LastRow;
- } *B;
- } *A;
- } RGSSBITMAP;
- #define BitmapData(b) ((b)->A->B->FirstRow)
- #define BitmapInfo(b) ((b)->A->B->C)
- // Pega o ponteiro para o pixel em x,y no bitmap
- // Entrada : Bitmap, posição x, posição y
- // Saída : Se for uma posição válida, ponteiro para o pixel, caso contrário, NULL.
- PIXEL GetPixelPointer(RGSSBITMAP *bitmap, unsigned int x, unsigned int y){
- // Checa X e Y
- if (
- (x < 0) or
- (x >= BitmapInfo(bitmap)->width) or
- (y < 0) or
- (y >= BitmapInfo(bitmap)->height)
- ) return NULL;
- // Posiciona "cursor" no primeiro pixel (0,0)
- PIXEL data = (PIXEL)BitmapData(bitmap);
- // Move até a linha y
- data += y * BitmapInfo(bitmap)->width;
- // Move até a coluna x
- data += x;
- // Retorna
- return data;
- }
- // Equivalente a Bitmap#get_pixel, do RGSS
- // Entrada : Bitmap, posição x, posição y, estrutura de saída do pixel
- // Saída : 0 = Falha | 1 = Sucesso
- DLLIMPORT int BitmapGetPixel(RGSSBITMAP *bitmap, unsigned int x, unsigned int y, PIXEL out){
- PIXEL data = GetPixelPointer(bitmap, x, y);
- if (data) {
- memcpy(out, data, sizeof(PIXEL));
- return TRUE;
- } else {
- return FALSE;
- }
- }
- // Equivalente a Bitmap#set_pixel, do RGSS
- // Entrada : Bitmap, posição x, posição y, estrutura com pixel de entrada
- // Saída : 0 = Falha | 1 = Sucesso
- DLLIMPORT int BitmapSetPixel(RGSSBITMAP *bitmap, unsigned int x, unsigned int y, PIXEL in) {
- PIXEL data = GetPixelPointer(bitmap, x, y);
- if (data) {
- memcpy(data, in, sizeof(PIXEL));
- return TRUE;
- } else {
- return FALSE;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment