本文整理汇总了C++中rectangle类的典型用法代码示例。如果您正苦于以下问题:C++ rectangle类的具体用法?C++ rectangle怎么用?C++ rectangle使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了rectangle类的17个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: bottom
long bottom(const rectangle& r) { return r.bottom(); }
开发者ID:AbdealiJK,项目名称:dlib,代码行数:1,代码来源:rectangles.cpp
示例2: top
long top(const rectangle& r) { return r.top(); }
开发者ID:AbdealiJK,项目名称:dlib,代码行数:1,代码来源:rectangles.cpp
示例3: right
long right(const rectangle& r) { return r.right(); }
开发者ID:AbdealiJK,项目名称:dlib,代码行数:1,代码来源:rectangles.cpp
示例4: left
long left(const rectangle& r) { return r.left(); }
开发者ID:AbdealiJK,项目名称:dlib,代码行数:1,代码来源:rectangles.cpp
示例5: mixDualAlphaSprites
/*
This function mimics the priority PROM/circuit on the pcb. It takes
the tilemaps & sprite bitmaps as inputs, and outputs a final pixel
based on alpha & priority values. Rendering sprites to temporary
bitmaps is the only reasonable way to implement proper priority &
blending support - it can't be done in-place on the final framebuffer
without a lot of support bitmaps.
*/
void nslasher_state::mixDualAlphaSprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, gfx_element *gfx0, gfx_element *gfx1, int mixAlphaTilemap)
{
const pen_t *pens = m_deco_ace->pens();
const pen_t *pal0 = &pens[gfx0->colorbase()];
const pen_t *pal1 = &pens[gfx1->colorbase()];
const pen_t *pal2 = &pens[m_gfxdecode->gfx((m_pri & 1) ? 1 : 2)->colorbase()];
bitmap_ind16& sprite0_mix_bitmap = m_sprgen[0]->get_sprite_temp_bitmap();
bitmap_ind16& sprite1_mix_bitmap = m_sprgen[1]->get_sprite_temp_bitmap();
/* Mix sprites into main bitmap, based on priority & alpha */
for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
uint8_t* tilemapPri = &screen.priority().pix8(y);
uint16_t* sprite0 = &sprite0_mix_bitmap.pix16(y);
uint16_t* sprite1 = &sprite1_mix_bitmap.pix16(y);
uint32_t* destLine = &bitmap.pix32(y);
uint16_t* alphaTilemap = &m_tilemap_alpha_bitmap->pix16(y);
for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
uint16_t const priColAlphaPal0 = sprite0[x];
uint16_t const priColAlphaPal1 = sprite1[x];
uint16_t const pri0 = (priColAlphaPal0 & 0x6000) >> 13;
uint16_t const pri1 = (priColAlphaPal1 & 0x6000) >> 13;
uint16_t const col0 = (((priColAlphaPal0 & 0x1f00) >> 8) % gfx0->colors()) * gfx0->granularity();
uint16_t const col1 = (((priColAlphaPal1 & 0x0f00) >> 8) % gfx1->colors()) * gfx1->granularity();
uint16_t const alpha1 = priColAlphaPal1 & 0x8000;
// Apply sprite bitmap 0 according to priority rules
if ((priColAlphaPal0 & 0xff) != 0)
{
/*
Sprite 0 priority rules:
0 = Sprite above all layers
1 = Sprite under top playfield
2 = Sprite under top two playfields
3 = Sprite under all playfields
*/
if ((pri0 & 0x3) == 0 || (pri0 & 0x3) == 1 || ((pri0 & 0x3) == 2 && mixAlphaTilemap)) // Spri0 on top of everything, or under alpha playfield
{
destLine[x] = pal0[(priColAlphaPal0 & 0xff) + col0];
}
else if ((pri0 & 0x3) == 2) // Spri0 under top playfield
{
if (tilemapPri[x] < 4)
destLine[x] = pal0[(priColAlphaPal0 & 0xff) + col0];
}
else // Spri0 under top & middle playfields
{
if (tilemapPri[x] < 2)
destLine[x] = pal0[(priColAlphaPal0 & 0xff) + col0];
}
}
// Apply sprite bitmap 1 according to priority rules
if ((priColAlphaPal1 & 0xff) != 0)
{
// Apply alpha for this pixel based on Ace setting
if (alpha1)
{
/*
Alpha rules:
Pri 0 - Over all tilemaps, but under sprite 0 pri 0, pri 1, pri 2
Pri 1 -
Pri 2 -
Pri 3 -
*/
/* Alpha values are tied to ACE ram... */
//int alpha = m_deco_ace->get_alpha(((priColAlphaPal1 & 0xf0) >> 4) / 2);
//if (alpha < 0)
// alpha = 0;
/* I don't really understand how object ACE ram is really hooked up,
the only obvious place in Night Slashers is the stagecoach in level 2 */
if (pri1 == 0 && (((priColAlphaPal0 & 0xff) == 0 || ((pri0 & 0x3) != 0 && (pri0 & 0x3) != 1 && (pri0 & 0x3) != 2))))
{
if ((m_pri & 1) == 0 || ((m_pri & 1) == 1 && tilemapPri[x] < 4) || ((m_pri & 1) == 1 && mixAlphaTilemap))
destLine[x] = alpha_blend_r32(destLine[x], pal1[(priColAlphaPal1 & 0xff) + col1], 0x80);
}
else if (pri1 == 1 && ((priColAlphaPal0 & 0xff) == 0 || ((pri0 & 0x3) != 0 && (pri0 & 0x3) != 1 && (pri0 & 0x3) != 2)))
destLine[x] = alpha_blend_r32(destLine[x], pal1[(priColAlphaPal1 & 0xff) + col1], 0x80);
else if (pri1 == 2) // TOdo
destLine[x] = alpha_blend_r32(destLine[x], pal1[(priColAlphaPal1 & 0xff) + col1], 0x80);
else if (pri1 == 3) // TOdo
destLine[x] = alpha_blend_r32(destLine[x], pal1[(priColAlphaPal1 & 0xff) + col1], 0x80);
}
else
{
//.........这里部分代码省略.........
开发者ID:fesh0r,项目名称:mame-full,代码行数:101,代码来源:deco32.cpp
示例6: memregion
UINT32 aristmk6_state::screen_update_aristmk6(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int x,y,count;
const UINT8 *blit_ram = memregion("maincpu")->base();
if(machine().input().code_pressed(KEYCODE_Z))
m_test_x++;
if(machine().input().code_pressed(KEYCODE_X))
m_test_x--;
if(machine().input().code_pressed(KEYCODE_A))
m_test_y++;
if(machine().input().code_pressed(KEYCODE_S))
m_test_y--;
if(machine().input().code_pressed(KEYCODE_Q))
m_start_offs+=0x2000;
if(machine().input().code_pressed(KEYCODE_W))
m_start_offs-=0x2000;
if(machine().input().code_pressed(KEYCODE_E))
m_start_offs++;
if(machine().input().code_pressed(KEYCODE_R))
m_start_offs--;
if(machine().input().code_pressed_once(KEYCODE_L))
m_type^=1;
popmessage("%d %d %04x %d",m_test_x,m_test_y,m_start_offs,m_type);
bitmap.fill(m_palette->black_pen(), cliprect);
count = (m_start_offs);
for(y=0;y<m_test_y;y++)
{
for(x=0;x<m_test_x;x++)
{
if(m_type)
{
UINT16 vram;
int r,g,b;
vram = blit_ram[count+0] | blit_ram[count+1]<<8;
r = (vram & 0x001f)>>0;
g = (vram & 0x07e0)>>5;
b = (vram & 0xf800)>>11;
r = (r << 3) | (r & 0x7);
g = (g << 2) | (g & 3);
b = (b << 3) | (b & 0x7);
if(cliprect.contains(x, y))
bitmap.pix32(y, x) = r | g<<8 | b<<16;
count+=2;
}
else
{
UINT8 color;
color = blit_ram[count];
if(cliprect.contains(x, y))
bitmap.pix32(y, x) = m_palette->pen(color);
count++;
}
}
}
开发者ID:kara1001000,项目名称:mame,代码行数:75,代码来源:aristmk6.cpp
示例7: main
//.........这里部分代码省略.........
data_out = data;
data_out.images.clear();
for (unsigned long i = 0; i < data.images.size(); ++i)
{
ifstream fin(data.images[i].filename.c_str(), ios::binary);
string hash = md5(fin);
if (hashes.count(hash) == 0)
{
hashes.insert(hash);
data_out.images.push_back(data.images[i]);
}
}
save_image_dataset_metadata(data_out, parser[0]);
return EXIT_SUCCESS;
}
if (parser.option("rmtrunc"))
{
if (parser.number_of_arguments() != 1)
{
cerr << "The --rmtrunc option requires you to give one XML file on the command line." << endl;
return EXIT_FAILURE;
}
dlib::image_dataset_metadata::dataset data;
load_image_dataset_metadata(data, parser[0]);
{
locally_change_current_dir chdir(get_parent_directory(file(parser[0])));
for (unsigned long i = 0; i < data.images.size(); ++i)
{
array2d<unsigned char> img;
load_image(img, data.images[i].filename);
const rectangle area = get_rect(img);
for (unsigned long j = 0; j < data.images[i].boxes.size(); ++j)
{
if (!area.contains(data.images[i].boxes[j].rect))
data.images[i].boxes[j].ignore = true;
}
}
}
save_image_dataset_metadata(data, parser[0]);
return EXIT_SUCCESS;
}
if (parser.option("l"))
{
if (parser.number_of_arguments() != 1)
{
cerr << "The -l option requires you to give one XML file on the command line." << endl;
return EXIT_FAILURE;
}
dlib::image_dataset_metadata::dataset data;
load_image_dataset_metadata(data, parser[0]);
print_all_labels(data);
return EXIT_SUCCESS;
}
if (parser.option("files"))
{
if (parser.number_of_arguments() != 1)
{
cerr << "The --files option requires you to give one XML file on the command line." << endl;
return EXIT_FAILURE;
}
开发者ID:DEVESHTARASIA,项目名称:dlib,代码行数:67,代码来源:main.cpp
示例8: main
int main(int argc, char** argv)
{
try
{
// make sure the user entered an argument to this program
if (argc != 2)
{
cout << "error, you have to enter a BMP file as an argument to this program" << endl;
return 1;
}
// Here we declare an image object that can store rgb_pixels. Note that in
// dlib there is no explicit image object, just a 2D array and
// various pixel types.
array2d<rgb_pixel> img;
// Now load the image file into our image. If something is wrong then
// load_image() will throw an exception. Also, if you linked with libpng
// and libjpeg then load_image() can load PNG and JPEG files in addition
// to BMP files.
load_image(img, argv[1]);
// get the 100 strongest SURF points from the image
std::vector<surf_point> sp = get_surf_points(img, 100);
// create a window to display the input image and the SURF boxes. (Note that
// you can zoom into the window by holding CTRL and scrolling the mouse wheel)
image_window my_window(img);
// Now lets draw some rectangles on top of the image so we can see where
// SURF found its points.
for (unsigned long i = 0; i < sp.size(); ++i)
{
// Pull out the info from the SURF point relevant to figuring out
// where its rotated box should be.
const unsigned long box_size = static_cast<unsigned long>(sp[i].p.scale*20);
const double ang = sp[i].angle;
const point center(sp[i].p.center);
const rectangle rect = centered_rect(center, box_size, box_size);
// Rotate the 4 corners of the rectangle
const point p1 = rotate_point(center, rect.tl_corner(), ang);
const point p2 = rotate_point(center, rect.tr_corner(), ang);
const point p3 = rotate_point(center, rect.bl_corner(), ang);
const point p4 = rotate_point(center, rect.br_corner(), ang);
// Draw the sides of the box as red lines
my_window.add_overlay(p1, p2, rgb_pixel(255,0,0));
my_window.add_overlay(p1, p3, rgb_pixel(255,0,0));
my_window.add_overlay(p4, p2, rgb_pixel(255,0,0));
my_window.add_overlay(p4, p3, rgb_pixel(255,0,0));
// Draw a line from the center to the top side so we can see how the box is oriented.
// Also make this line green.
my_window.add_overlay(center, (p1+p2)/2, rgb_pixel(0,255,0));
}
// wait until the user closes the window before we let the program
// terminate.
my_window.wait_until_closed();
}
catch (exception& e)
{
cout << "exception thrown: " << e.what() << endl;
}
}
开发者ID:KRSSG,项目名称:Simurosot,代码行数:66,代码来源:surf_ex.cpp
示例9: rotate_dataset
void rotate_dataset(const command_line_parser& parser)
{
image_dataset_metadata::dataset metadata;
const string datasource = parser[0];
load_image_dataset_metadata(metadata,datasource);
double angle = get_option(parser, "rotate", 0);
// Set the current directory to be the one that contains the
// metadata file. We do this because the file might contain
// file paths which are relative to this folder.
set_current_dir(get_parent_directory(file(datasource)));
const string file_prefix = "rotated_"+ cast_to_string(angle) + "_";
const string metadata_filename = get_parent_directory(file(datasource)).full_name() +
directory::get_separator() + file_prefix + file(datasource).name();
array2d<rgb_pixel> img, temp;
for (unsigned long i = 0; i < metadata.images.size(); ++i)
{
file f(metadata.images[i].filename);
string filename = get_parent_directory(f).full_name() + directory::get_separator() + file_prefix + to_png_name(f.name());
load_image(img, metadata.images[i].filename);
const point_transform_affine tran = rotate_image(img, temp, angle*pi/180);
if (parser.option("jpg"))
{
filename = to_jpg_name(filename);
save_jpeg(temp, filename,JPEG_QUALITY);
}
else
{
save_png(temp, filename);
}
for (unsigned long j = 0; j < metadata.images[i].boxes.size(); ++j)
{
const rectangle rect = metadata.images[i].boxes[j].rect;
rectangle newrect;
newrect += tran(rect.tl_corner());
newrect += tran(rect.tr_corner());
newrect += tran(rect.bl_corner());
newrect += tran(rect.br_corner());
// now make newrect have the same area as the starting rect.
double ratio = std::sqrt(rect.area()/(double)newrect.area());
newrect = centered_rect(newrect, newrect.width()*ratio, newrect.height()*ratio);
metadata.images[i].boxes[j].rect = newrect;
// rotate all the object parts
std::map<std::string,point>::iterator k;
for (k = metadata.images[i].boxes[j].parts.begin(); k != metadata.images[i].boxes[j].parts.end(); ++k)
{
k->second = tran(k->second);
}
}
metadata.images[i].filename = filename;
}
save_image_dataset_metadata(metadata, metadata_filename);
}
开发者ID:DEVESHTARASIA,项目名称:dlib,代码行数:62,代码来源:main.cpp
示例10: resample_dataset
int resample_dataset(const command_line_parser& parser)
{
if (parser.number_of_arguments() != 1)
{
cerr << "The --resample option requires you to give one XML file on the command line." << endl;
return EXIT_FAILURE;
}
const size_t obj_size = get_option(parser,"cropped-object-size",100*100);
const double margin_scale = get_option(parser,"crop-size",2.5); // cropped image will be this times wider than the object.
const unsigned long min_object_size = get_option(parser,"min-object-size",1);
const bool one_object_per_image = parser.option("one-object-per-image");
dlib::image_dataset_metadata::dataset data, resampled_data;
std::ostringstream sout;
sout << "\nThe --resample parameters which generated this dataset were:" << endl;
sout << " cropped-object-size: "<< obj_size << endl;
sout << " crop-size: "<< margin_scale << endl;
sout << " min-object-size: "<< min_object_size << endl;
if (one_object_per_image)
sout << " one_object_per_image: true" << endl;
resampled_data.comment = data.comment + sout.str();
resampled_data.name = data.name + " RESAMPLED";
load_image_dataset_metadata(data, parser[0]);
locally_change_current_dir chdir(get_parent_directory(file(parser[0])));
dlib::rand rnd;
const size_t image_size = std::round(std::sqrt(obj_size*margin_scale*margin_scale));
const chip_dims cdims(image_size, image_size);
console_progress_indicator pbar(data.images.size());
for (unsigned long i = 0; i < data.images.size(); ++i)
{
// don't even bother loading images that don't have objects.
if (data.images[i].boxes.size() == 0)
continue;
pbar.print_status(i);
array2d<rgb_pixel> img, chip;
load_image(img, data.images[i].filename);
// figure out what chips we want to take from this image
for (unsigned long j = 0; j < data.images[i].boxes.size(); ++j)
{
const rectangle rect = data.images[i].boxes[j].rect;
if (data.images[i].boxes[j].ignore || rect.area() < min_object_size)
continue;
const auto max_dim = std::max(rect.width(), rect.height());
const double rand_scale_perturb = 1 - 0.3*(rnd.get_random_double()-0.5);
const rectangle crop_rect = centered_rect(rect, max_dim*margin_scale*rand_scale_perturb, max_dim*margin_scale*rand_scale_perturb);
const rectangle_transform tform = get_mapping_to_chip(chip_details(crop_rect, cdims));
extract_image_chip(img, chip_details(crop_rect, cdims), chip);
image_dataset_metadata::image dimg;
// Now transform the boxes to the crop and also mark them as ignored if they
// have already been cropped out or are outside the crop.
for (size_t k = 0; k < data.images[i].boxes.size(); ++k)
{
image_dataset_metadata::box box = data.images[i].boxes[k];
// ignore boxes outside the cropped image
if (crop_rect.intersect(box.rect).area() == 0)
continue;
// mark boxes we include in the crop as ignored. Also mark boxes that
// aren't totally within the crop as ignored.
if (crop_rect.contains(grow_rect(box.rect,10)) && (!one_object_per_image || k==j))
data.images[i].boxes[k].ignore = true;
else
box.ignore = true;
if (box.rect.area() < min_object_size)
box.ignore = true;
box.rect = tform(box.rect);
for (auto&& p : box.parts)
p.second = tform.get_tform()(p.second);
dimg.boxes.push_back(box);
}
// Put a 64bit hash of the image data into the name to make sure there are no
// file name conflicts.
std::ostringstream sout;
sout << hex << murmur_hash3_128bit(&chip[0][0], chip.size()*sizeof(chip[0][0])).second;
dimg.filename = data.images[i].filename + "_RESAMPLED_"+sout.str()+".png";
if (parser.option("jpg"))
{
dimg.filename = to_jpg_name(dimg.filename);
save_jpeg(chip,dimg.filename, JPEG_QUALITY);
}
else
{
save_png(chip,dimg.filename);
}
resampled_data.images.push_back(dimg);
}
//.........这里部分代码省略.........
开发者ID:DEVESHTARASIA,项目名称:dlib,代码行数:101,代码来源:main.cpp
示例11: screen_update
UINT32 archimedes_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int xstart,ystart,xend,yend;
int res_x,res_y;
int xsize,ysize;
int calc_dxs = 0,calc_dxe = 0;
const UINT8 x_step[4] = { 5, 7, 11, 19 };
/* border color */
bitmap.fill(machine().pens[0x10], cliprect);
/* define X display area through BPP mode register */
calc_dxs = (m_vidc_regs[VIDC_HDSR]*2)+x_step[m_vidc_bpp_mode & 3];
calc_dxe = (m_vidc_regs[VIDC_HDER]*2)+x_step[m_vidc_bpp_mode & 3];
/* now calculate display clip rectangle start/end areas */
xstart = (calc_dxs)-m_vidc_regs[VIDC_HBSR];
ystart = (m_vidc_regs[VIDC_VDSR])-m_vidc_regs[VIDC_VBSR];
xend = (calc_dxe)+xstart;
yend = m_vidc_regs[VIDC_VDER]+ystart;
/* disable the screen if display params are invalid */
if(xstart > xend || ystart > yend)
return 0;
xsize = calc_dxe-calc_dxs;
ysize = m_vidc_regs[VIDC_VDER]-m_vidc_regs[VIDC_VDSR];
{
int count;
int x,y,xi;
UINT8 pen;
static UINT8 *vram = memregion("vram")->base();
count = (0);
switch(m_vidc_bpp_mode)
{
case 0: //1 bpp
{
for(y=0;y<ysize;y++)
{
for(x=0;x<xsize;x+=8)
{
pen = vram[count];
for(xi=0;xi<8;xi++)
{
res_x = x+xi+xstart;
res_y = (y+ystart)*(m_vidc_interlace+1);
if(m_vidc_interlace)
{
if (cliprect.contains(res_x, res_y) && (res_x) <= xend && (res_y) <= yend)
bitmap.pix32(res_y, res_x) = machine().pens[(pen>>(xi))&0x1];
if (cliprect.contains(res_x, res_y+1) && (res_x) <= xend && (res_y+1) <= yend)
bitmap.pix32(res_y+1, res_x) = machine().pens[(pen>>(xi))&0x1];
}
else
{
if (cliprect.contains(res_x, res_y) && (res_x) <= xend && (res_y) <= yend)
bitmap.pix32(res_y, res_x) = machine().pens[(pen>>(xi))&0x1];
}
}
count++;
}
}
}
break;
case 3: //8 bpp
{
for(y=0;y<ysize;y++)
{
for(x=0;x<xsize;x++)
{
pen = vram[count];
res_x = x+xstart;
res_y = (y+ystart)*(m_vidc_interlace+1);
if(m_vidc_interlace)
{
if (cliprect.contains(res_x, res_y) && (res_x) <= xend && (res_y) <= yend)
bitmap.pix32(res_y, res_x) = machine().pens[(pen&0xff)+0x100];
if (cliprect.contains(res_x, res_y) && (res_x) <= xend && (res_y+1) <= yend)
bitmap.pix32(res_y+1, res_x) = machine().pens[(pen&0xff)+0x100];
}
else
{
if (cliprect.contains(res_x, res_y) && (res_x) <= xend && (res_y) <= yend)
bitmap.pix32(res_y, res_x) = machine().pens[(pen&0xff)+0x100];
}
count++;
}
}
}
break;
}
//.........这里部分代码省略.........
开发者ID:CJBass,项目名称:mame2013-libretro,代码行数:101,代码来源:archimds.c
示例12: cairo_surface_mark_dirty_rectangle
void mapped_surface::commit_changes(const rectangle& area, error_code& ec) noexcept {
cairo_surface_mark_dirty_rectangle(_Mapped_surface.csfce, static_cast<int>(area.x()), static_cast<int>(area.y()),
static_cast<int>(area.width()), static_cast<int>(area.height()));
ec.clear();
}
开发者ID:cristianadam,项目名称:io2d,代码行数:5,代码来源:mapped_surface.cpp
示例13: width
long width(const rectangle& r) { return r.width(); }
开发者ID:AbdealiJK,项目名称:dlib,代码行数:1,代码来源:rectangles.cpp
示例14: draw_sprites
/*
* Sprite Format
* ------------------
*
* Word | Bit(s) | Use
* -----+-fedcba9876543210-+----------------
* 0 | --------xxxxxxxx | display y start
* 0 | xxxxxxxx-------- | display y end
* 2 | -------xxxxxxxxx | x position
* 2 | ------x--------- | unknown (used in logicpr2, maybe just a bug?)
* 2 | xxxxxx---------- | unused?
* 4 | ---------xxxxxxx | width
* 4 | --------x------- | is this flip y like in System 16?
* 4 | -------x-------- | flip x
* 4 | xxxxxxx--------- | unused?
* 6 | xxxxxxxxxxxxxxxx | ROM address low bits
* 8 | ----------xxxxxx | color
* 8 | --------xx------ | priority
* 8 | ---xxxxx-------- | ROM address high bits
* 8 | xxx------------- | unused? (extra address bits for larger ROMs?)
* a | ---------------- | zoomx like in System 16?
* c | ---------------- | zoomy like in System 16?
* e | ---------------- |
*/
void deniam_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
{
int offs;
UINT8 *gfx = memregion("gfx2")->base();
for (offs = m_spriteram.bytes() / 2 - 8; offs >= 0; offs -= 8)
{
int sx, starty, endy, x, y, start, color, width, flipx, primask;
UINT8 *rom = gfx;
sx = (m_spriteram[offs + 1] & 0x01ff) + 16 * 8 - 1;
if (sx >= 512) sx -= 512;
starty = m_spriteram[offs + 0] & 0xff;
endy = m_spriteram[offs + 0] >> 8;
width = m_spriteram[offs + 2] & 0x007f;
flipx = m_spriteram[offs + 2] & 0x0100;
if (flipx) sx++;
color = 0x40 + (m_spriteram[offs + 4] & 0x3f);
primask = 8;
switch (m_spriteram[offs + 4] & 0xc0)
{
case 0x00: primask |= 4 | 2 | 1; break; /* below everything */
case 0x40: primask |= 4 | 2; break; /* below fg and tx */
case 0x80: primask |= 4; break; /* below tx */
case 0xc0: break; /* above everything */
}
start = m_spriteram[offs + 3] + ((m_spriteram[offs + 4] & 0x1f00) << 8);
rom += 2 * start;
for (y = starty + 1; y <= endy; y++)
{
int drawing = 0;
int i = 0;
rom += 2 * width; /* note that the first line is skipped */
x = 0;
while (i < 512) /* safety check */
{
if (flipx)
{
if ((rom[i] & 0x0f) == 0x0f)
{
if (!drawing) drawing = 1;
else break;
}
else
{
if (rom[i] & 0x0f)
{
if (cliprect.contains(sx + x, y))
{
if ((screen.priority().pix8(y, sx + x) & primask) == 0)
bitmap.pix16(y, sx + x) = color * 16 + (rom[i] & 0x0f);
screen.priority().pix8(y, sx + x) = 8;
}
}
x++;
}
if ((rom[i] & 0xf0) == 0xf0)
{
if (!drawing) drawing = 1;
else break;
}
else
{
if (rom[i] & 0xf0)
{
if (cliprect.contains(sx + x, y))
{
if ((screen.priority().pix8(y, sx + x) & primask) == 0)
//.........这里部分代码省略.........
开发者ID:,项目名称:,代码行数:101,代码来源:
示例15: height
long height(const rectangle& r) { return r.height(); }
开发者ID:AbdealiJK,项目名称:dlib,代码行数:1,代码来源:rectangles.cpp
示例16: intersection
bool intersection(const rectangle & r, point pos_beg, point pos_end, point& good_pos_beg, point& good_pos_end)
{
const int right = r.right();
const int bottom = r.bottom();
if(pos_beg.x > pos_end.x)
std::swap(pos_beg, pos_end);
bool good_beg = (0 <= pos_beg.x && pos_beg.x < right && 0 <= pos_beg.y && pos_beg.y < bottom);
bool good_end = (0 <= pos_end.x && pos_end.x < right && 0 <= pos_end.y && pos_end.y < bottom);
if(good_beg && good_end)
{
good_pos_beg = pos_beg;
good_pos_end = pos_end;
return true;
}
else if(pos_beg.x == pos_end.x)
{
if(r.x <= pos_beg.x && pos_beg.x < right)
{
if(pos_beg.y < r.y)
{
if(pos_end.y < r.y)
return false;
good_pos_beg.y = r.y;
good_pos_end.y = (pos_end.y < bottom ? pos_end.y : bottom - 1);
}
else if(pos_beg.y >= bottom)
{
if(pos_end.y >= bottom)
return false;
good_pos_beg.y = bottom - 1;
good_pos_end.y = (pos_end.y < r.y ? r.y : pos_end.y);
}
good_pos_beg.x = good_pos_end.x = r.x;
return true;
}
return false;
}
else if(pos_beg.y == pos_end.y)
{
if(r.y <= pos_beg.y && pos_beg.y < bottom)
{
if(pos_beg.x < r.x)
{
if(pos_end.x < r.x)
return false;
good_pos_beg.x = r.x;
good_pos_end.x = (pos_end.x < right ? pos_end.x : right - 1);
}
else if(pos_beg.x >= right)
{
if(pos_end.x >= right)
return false;
good_pos_beg.x = right - 1;
good_pos_end.x = (pos_end.x < r.x ? r.x : pos_end.x);
}
good_pos_beg.y = good_pos_end.y = r.y;
return true;
}
return false;
}
double m = (pos_end.y - pos_beg.y ) / double(pos_end.x - pos_beg.x);
bool is_nw_to_se = (m >= 0.0);
//The formulas for the line.
//y = m * (x - pos_beg.x) + pos_beg.y
//x = (y - pos_beg.y) / m + pos_beg.x
if(!good_beg)
{
good_pos_beg.y = static_cast<int>(m * (r.x - pos_beg.x)) + pos_beg.y;
if(r.y <= good_pos_beg.y && good_pos_beg.y < bottom)
{
good_pos_beg.x = r.x;
}
else
{
bool cond;
int y;
if(is_nw_to_se)
{
y = r.y;
cond = good_pos_beg.y < y;
}
else
{
y = bottom - 1;
cond = good_pos_beg.y > y;
}
if(cond)
{
good_pos_beg.x = static_cast<int>((y - pos_beg.y) / m) + pos_beg.x;
if(r.x <= good_pos_beg.x && good_pos_beg.x < right)
good_pos_beg.y = y;
else
//.........这里部分代码省略.........
开发者ID:cnjinhao,项目名称:nana,代码行数:101,代码来源:layout_utility.cpp
示例17: getCenter
vec2 getCenter()const { return bounds.center(); };
开发者ID:dmishin,项目名称:dmishin-pyscript,代码行数:1,代码来源:world.hpp
注:本文中的rectangle类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论