utiles_v2017/bmp_control.h

102 lines
2.9 KiB
C++

#pragma once
#include "base_head.h"
//bmp para pintar graficos antes de pintarlos en pantalla
//asi se evita el parpadeo
class UTILES_EXPORT Cbmp_control//falta revisar
{
public:
//variables-------------------------------------
BYTE* bits;//bits del bmp
int ancho;//ancho en pixel del bmp
int alto;//alto en pixel del bmp
BITMAPINFO* bmp_info;
HDC m_hdc;
CDC *m_cdc;
HBITMAP m_bitmap, m_old_bitmap;
BOOL m_iniciado;
//c y de------------------------------------------
Cbmp_control(int cx, int cy);
~Cbmp_control();
//funciones---------------------------------------
void pinta_dib(HDC dc, CRect r);//pinta lo dibujado en el bmp en el hdc pasado
BOOL dib2file(char *path);//guarda el bmp en un archivo
BOOL w2dib( CWnd *w, CRect *rec=NULL, DWORD flags=PRF_CLIENT);//copia la pantalla al bmp
void redimensiona(int cx, int cy, BOOL limpiar=TRUE, char ch=0);//redimensiona el bmp
void crea(BOOL limpiar=TRUE, char ch=0);//crea bmp
void destruye();//destrulle bmp
HDC dame_hdc();//da el hanled para pintar
CDC* dame_cdc();
static BOOL w2file(CWnd *w,char* path, CRect *rec=NULL);//pasa lo contenido en la ventana a un archivo de imagen
BYTE* dame_bits(){return bits;};
int dame_ancho(){return ancho;};
int dame_alto(){return alto;};
//BOOL guardar_bmp(char *path);
void escribe_pixel(int x, int y, BYTE valor);
void colorea_pixel(int x, int y, BYTE valor);
void pinta_cruz(int x, int y, int ancho, BYTE color);
void rellena_bits(char ch=0);
void pon_bits(LPVOID src, int count);
void mueve_datos(int cx, int cy);
BOOL esta_iniciado(){return m_iniciado;};
void pon_iniciado(BOOL flag){m_iniciado=flag;};
public:
};
/*void CCatchScreenDlg::SaveScreenToFile(LPCTSTR szFileName)
{
HDC hScrDC = ::GetDC(NULL);
HDC hMemDC = NULL;
BYTE *lpBitmapBits = NULL;
int nWidth = GetSystemMetrics(SM_CXSCREEN);
int nHeight = GetSystemMetrics(SM_CYSCREEN);
hMemDC = ::CreateCompatibleDC(hScrDC);
BITMAPINFO bi;
ZeroMemory(&bi, sizeof(BITMAPINFO));
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biWidth = nWidth;
bi.bmiHeader.biHeight = nHeight;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = 24;
HBITMAP bitmap = ::CreateDIBSection(hMemDC, &bi, DIB_RGB_COLORS, (LPVOID*)&lpBitmapBits, NULL, 0);
HGDIOBJ oldbmp = ::SelectObject(hMemDC, bitmap);
::BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, 0, 0, SRCCOPY);
BITMAPFILEHEADER bh;
ZeroMemory(&bh, sizeof(BITMAPFILEHEADER));
bh.bfType = 0x4d42; //bitmap
bh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bh.bfSize = bh.bfOffBits + ((nWidth*nHeight)*3);
CFile file;
if(file.Open(szFileName, CFile::modeCreate | CFile::modeWrite))
{
file.Write(&bh, sizeof(BITMAPFILEHEADER));
file.Write(&(bi.bmiHeader), sizeof(BITMAPINFOHEADER));
file.Write(lpBitmapBits, 3 * nWidth * nHeight);
file.Close();
}
::SelectObject(hMemDC, oldbmp);
::DeleteObject(bitmap);
::DeleteObject(hMemDC);
::ReleaseDC(NULL, hScrDC);
}
*/