Class: RWin::Bitmap
- Inherits:
-
Data
- Object
- Data
- RWin::Bitmap
- Defined in:
- ext/rwin/rw_resources.c
Direct Known Subclasses
Class Method Summary collapse
- ._load(str) ⇒ Object
- .fromfile(fname) ⇒ Object
- .fromhandle(v_hbitmap) ⇒ Object
- .monochrome(v_w, v_h) ⇒ Object
Instance Method Summary collapse
- #_dump(*args) ⇒ Object
- #_hbitmap ⇒ Object
- #_hdc ⇒ Object
- #_hddbitmap ⇒ Object
- #depth ⇒ Object
- #dispose ⇒ Object
- #draw(*args) ⇒ Object
-
#GetPixel(v_x, v_y) ⇒ Object
moved to wrb/components/Bitmap.rb static VALUE rwbitmap_create_mask(VALUE self, VALUE v_mskclr){ COLORREF oldbkclr; int w, h; VALUE robj; BITMAP bmp; RwBitmap *rmsk; RwBitmap *rb = DATA_PTR(self); GetObject(rb->hbitmap, sizeof(BITMAP), &bmp); w = bmp.bmWidth; h = bmp.bmHeight; robj = RwBitmap_Data_Make_Struct(CLASS_OF(self), rmsk); oldbkclr = SetBkColor(rb->hdc, NUM2INT(v_mskclr)); rmsk->hdc = CreateCompatibleDC(NULL); rmsk->hbitmap = CreateBitmap(w, h, 1, 1, NULL); SelectObject(rmsk->hdc, rmsk->hbitmap); BitBlt(rmsk->hdc, 0, 0, w, h, rb->hdc, 0, 0, NOTSRCCOPY); SetBkColor(rb->hdc, oldbkclr); Register_rsc(rmsk->hbitmap, robj); return robj; }.
- #height ⇒ Object
- #initialize(*args) ⇒ Object constructor
- #SetPixel(v_x, v_y, v_clr) ⇒ Object
- #width ⇒ Object
Constructor Details
#initialize(*args) ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'ext/rwin/rw_resources.c', line 117
static VALUE
rwbitmap_initialize(int argc, VALUE *argv, VALUE self){
VALUE v_w, v_h, v_color;
int w, h;
RwBitmap *rb = DATA_PTR(self);
rb_scan_args(argc, argv, "21", &v_w, &v_h, &v_color);
w = FIX2INT(v_w); h = FIX2INT(v_h);
rw_bitmap_set_dc(rb, w, h);
if(!NIL_P(v_color)){
RECT rect;
COLORREF prevcolor = SetDCBrushColor(rb->hdc, FIX2INT(v_color));
rect.left = -1; rect.top = -1; rect.right = w + 1; rect.bottom = h + 1;
FillRect(rb->hdc, &rect, GetStockObject(DC_BRUSH));
SetDCBrushColor(rb->hdc, prevcolor);
}
Register_rsc(rb->hbitmap, self);
return self;
}
|
Class Method Details
._load(str) ⇒ Object
322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 |
# File 'ext/rwin/rw_resources.c', line 322
static VALUE
rwbitmap1__load(VALUE klass, VALUE str){
RwBitmap* rb;
VALUE robj;
BITMAPINFO *bi;
int biw, bih;
char *ptr = RSTRING_PTR(str);
char *bits;
BITMAPFILEHEADER *bf = (BITMAPFILEHEADER*)ptr;
if(bf->bfType!=0x4d42) rb_raise(rb_eArgError, "Not a bitmap file");
bi = (BITMAPINFO*)(ptr + sizeof(BITMAPFILEHEADER));
bits = ptr + bf->bfOffBits;
biw = bi->bmiHeader.biWidth;
bih = bi->bmiHeader.biHeight;
robj = RwBitmap_Data_Make_Struct(klass, rb);
rb->type = RcBitmap;
rw_bitmap_set_dc(rb, biw, bih);
SetDIBitsToDevice(rb->hdc, 0, 0, biw, bih, 0, 0, 0, bih, bits, bi, DIB_RGB_COLORS);
Register_rsc(rb->hbitmap, robj);
return robj;
}
|
.fromfile(fname) ⇒ Object
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'ext/rwin/rw_resources.c', line 136
static VALUE
rwbitmap1_fromfile(VALUE klass, VALUE fname){
char abspath[RW_MAXPATH];
RwBitmap* rb;
VALUE robj = RwBitmap_Data_Make_Struct(klass, rb);
rwconv2absolute_path(abspath, RSTRING_PTR(fname));
rb->hbitmap = LoadImageA(NULL, abspath, IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
if(!rb->hbitmap){
char pwd[256];
getcwd(pwd, sizeof(pwd));
rb_raise(rb_eRuntimeError, "Bitmap load failed(%s), err=%d, pwd=%s.",
abspath, (int)GetLastError(), pwd);
}
rb->shared = FALSE;
rb->type = RcBitmap;
rb->hdc = CreateCompatibleDC(NULL);
SelectObject(rb->hdc, rb->hbitmap);
Register_rsc(rb->hbitmap, robj);
return robj;
}
|
.fromhandle(v_hbitmap) ⇒ Object
171 172 173 174 175 176 |
# File 'ext/rwin/rw_resources.c', line 171
static VALUE
rwbitmap1_fromhandle(VALUE klass, VALUE v_hbitmap){
VALUE robj = Get_rsc(NUM2INT(v_hbitmap));
if (robj) return robj;
return rwbitmap1_fromhandle_core(klass, (HANDLE)NUM2ULONG_PTR(v_hbitmap));
}
|
.monochrome(v_w, v_h) ⇒ Object
178 179 180 181 182 183 184 185 186 187 |
# File 'ext/rwin/rw_resources.c', line 178
static VALUE
rwbitmap1_monochrome(VALUE klass, VALUE v_w, VALUE v_h){
RwBitmap* rb;
VALUE robj = RwBitmap_Data_Make_Struct(klass, rb);
rb->hbitmap = CreateBitmap(FIX2INT(v_w), FIX2INT(v_h), 1, 1, NULL);
rb->hdc = CreateCompatibleDC(NULL);
SelectObject(rb->hdc, rb->hbitmap);
Register_rsc(rb->hbitmap, robj);
return robj;
}
|
Instance Method Details
#_dump(*args) ⇒ Object
386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 |
# File 'ext/rwin/rw_resources.c', line 386
static VALUE
rwbitmap__dump(int argc, VALUE* argv, VALUE self){
LPVOID lpbmpdata = NULL;
int offsetbits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
int cdpth = argc>0 ? FIX2INT(argv[0]) : 32;
int cctbl = rw_get_colortable_len(cdpth);
size_t szimage = rwbitmap__dump_core(self, NULL, cdpth, 0, cctbl);
RW_MALLOC(lpbmpdata, szimage + offsetbits + cctbl);
if(rwbitmap__dump_core(self, lpbmpdata, cdpth, szimage, cctbl)){
VALUE str = rb_str_new((char*)lpbmpdata, szimage + offsetbits + cctbl);
if(lpbmpdata) free(lpbmpdata);
return str;
} else {
if(lpbmpdata) free(lpbmpdata);
return Qnil;
}
}
|
#_hbitmap ⇒ Object
189 190 191 192 193 |
# File 'ext/rwin/rw_resources.c', line 189
static VALUE
rwbitmap_hbitmap(VALUE self){
RwBitmap *rb = DATA_PTR(self);
return ULONG_PTR2NUM((ULONG_PTR)rb->hbitmap);
}
|
#_hdc ⇒ Object
203 204 205 206 207 |
# File 'ext/rwin/rw_resources.c', line 203
static VALUE
rwbitmap_hdc(VALUE self){
RwBitmap *rb = DATA_PTR(self);
return ULONG_PTR2NUM((ULONG_PTR)rb->hdc);
}
|
#_hddbitmap ⇒ Object
195 196 197 198 199 200 |
# File 'ext/rwin/rw_resources.c', line 195
static VALUE
rwbitmap_hddbitmap(VALUE self){
RwBitmap *rb = DATA_PTR(self);
if(!rb->hddbitmap) rw_dib2ddb(rb);
return ULONG_PTR2NUM((ULONG_PTR)rb->hddbitmap);
}
|
#depth ⇒ Object
314 315 316 317 318 319 320 |
# File 'ext/rwin/rw_resources.c', line 314
static VALUE
rwbitmap_getdepth(VALUE self){
BITMAP bmp;
RwBitmap *rb = DATA_PTR(self);
GetObject(rb->hbitmap,sizeof(BITMAP), &bmp);
return INT2FIX(bmp.bmBitsPixel);
}
|
#dispose ⇒ Object
239 240 241 242 243 244 245 246 247 248 249 |
# File 'ext/rwin/rw_resources.c', line 239
static VALUE
rwbitmap_dispose(VALUE self){
RwBitmap *rb = DATA_PTR(self);
DeleteDC(rb->hdc);
if (rb->hbitmap) {
if(!rb->shared) DeleteObject(rb->hbitmap);
rb->hbitmap = NULL;
return Qtrue;
}
return Qnil;
}
|
#draw(*args) ⇒ Object
225 226 227 228 229 230 231 232 233 234 235 236 237 |
# File 'ext/rwin/rw_resources.c', line 225
static VALUE
rwbitmap_draw(int argc, VALUE *argv, VALUE self){
VALUE klass, obj;
RwCanvas *cv;
RwBitmap *rb = DATA_PTR(self);
rb_scan_args(argc, argv, "01", &klass);
if(!rb_block_given_p()) rb_raise(rb_eArgError, "Need block");
if (NIL_P(klass)) klass = cRwCanvas;
obj = RwCanvas_Data_Make_Struct(klass, cv);
cv->hdc = rb->hdc;
rb_yield(obj);
return self;
}
|
#GetPixel(v_x, v_y) ⇒ Object
moved to wrb/components/Bitmap.rb static VALUE rwbitmap_create_mask(VALUE self, VALUE v_mskclr)
COLORREF oldbkclr;
int w, h;
VALUE robj;
BITMAP bmp;
RwBitmap *rmsk;
RwBitmap *rb = DATA_PTR(self);
GetObject(rb->hbitmap, sizeof(BITMAP), &bmp);
w = bmp.bmWidth; h = bmp.bmHeight;
robj = RwBitmap_Data_Make_Struct(CLASS_OF(self), rmsk);
oldbkclr = SetBkColor(rb->hdc, NUM2INT(v_mskclr));
rmsk->hdc = CreateCompatibleDC(NULL);
rmsk->hbitmap = CreateBitmap(w, h, 1, 1, NULL);
SelectObject(rmsk->hdc, rmsk->hbitmap);
BitBlt(rmsk->hdc, 0, 0, w, h, rb->hdc, 0, 0, NOTSRCCOPY);
SetBkColor(rb->hdc, oldbkclr);
Register_rsc(rmsk->hbitmap, robj);
return robj;
static VALUE rwbitmap_create_maskimage(VALUE self, VALUE v_mskclr)
COLORREF oldbkclr;
int w, h;
VALUE robj;
BITMAP bmp;
HBITMAP hbmptmp;
HDC hdctmp;
RwBitmap *rmsk;
RwBitmap *rb = DATA_PTR(self);
GetObject(rb->hbitmap, sizeof(BITMAP), &bmp);
w = bmp.bmWidth; h = bmp.bmHeight;
robj = RwBitmap_Data_Make_Struct(CLASS_OF(self), rmsk);
oldbkclr = SetBkColor(rb->hdc, NUM2INT(v_mskclr));
hdctmp = CreateCompatibleDC(NULL);
hbmptmp = CreateBitmap(w, h, 1, 1, NULL);
SelectObject(hdctmp, hbmptmp);
BitBlt(hdctmp, 0, 0, w, h, rb->hdc, 0, 0, SRCCOPY);
SetBkColor(rb->hdc, oldbkclr);
rw_bitmap_set_dc(rmsk, w, h);
SelectObject(rmsk->hdc, rmsk->hbitmap);
BitBlt(rmsk->hdc, 0, 0, w, h, hdctmp, 0, 0, SRCCOPY);
DeleteObject(hbmptmp);
ReleaseDC(NULL, hdctmp);
Register_rsc(rmsk->hbitmap, robj);
return robj;
302 303 304 305 306 |
# File 'ext/rwin/rw_resources.c', line 302
static VALUE
rwbitmap_getpixel(VALUE self, VALUE v_x, VALUE v_y){
RwBitmap *rb = DATA_PTR(self);
return UINT2NUM(GetPixel(rb->hdc, FIX2INT(v_x), FIX2INT(v_y)));
}
|
#height ⇒ Object
217 218 219 220 221 222 223 |
# File 'ext/rwin/rw_resources.c', line 217
static VALUE
rwbitmap_height(VALUE self){
BITMAP bmp;
RwBitmap *rb = DATA_PTR(self);
GetObject(rb->hbitmap, sizeof(BITMAP), &bmp);
return INT2FIX(bmp.bmHeight);
}
|
#SetPixel(v_x, v_y, v_clr) ⇒ Object
308 309 310 311 312 |
# File 'ext/rwin/rw_resources.c', line 308
static VALUE
rwbitmap_setpixel(VALUE self, VALUE v_x, VALUE v_y, VALUE v_clr){
RwBitmap *rb = DATA_PTR(self);
return UINT2NUM(SetPixel(rb->hdc, FIX2INT(v_x), FIX2INT(v_y), (COLORREF)FIX2INT(v_clr)));
}
|
#width ⇒ Object
209 210 211 212 213 214 215 |
# File 'ext/rwin/rw_resources.c', line 209
static VALUE
rwbitmap_width(VALUE self){
BITMAP bmp;
RwBitmap *rb = DATA_PTR(self);
GetObject(rb->hbitmap, sizeof(BITMAP), &bmp);
return INT2FIX(bmp.bmWidth);
}
|