Image rotation Sample. This program uses GraphicsFramework library and L3GD20 sensor.
Dependencies: GR-PEACH_video GraphicsFramework L3GD20 R_BSP mbed-rtos mbed
Fork of RGA_HelloWorld by
About L3GD20
L3GD20 is a 3-axis gyroscope sensor and can be controlled by using theI2C.
- Datasheet of L3GD20
http://www.st.com/content/ccc/resource/technical/document/datasheet/43/37/e3/06/b0/bf/48/bd/DM00036465.pdf/files/DM00036465.pdf/jcr:content/translations/en.DM00036465.pdf
About wiring
| Sensor | GR-PEACH |
| VDD | 3.3V |
| SCL | D15 |
| SDA | D14 |
| SA0 | 3.3V |
| CS | 3.3V |
| GND | GND |
Diff: rga_func.cpp
- Revision:
- 2:c7faef0ef374
- Parent:
- 0:84e4649e7707
- Child:
- 3:841987280a7f
--- a/rga_func.cpp Wed Jan 20 02:35:42 2016 +0000
+++ b/rga_func.cpp Thu Jan 21 10:10:19 2016 +0000
@@ -22,8 +22,10 @@
#include "rga_func.h"
#include "Images/BinaryImage_RZ_A1H.h"
-#define ZOOM_SRC_CENTER_X IMAGE_WIDTH_ZOOM_FUNC / 2
-#define ZOOM_SRC_CENTER_Y IMAGE_HEIGHT_ZOOM_FUNC / 2
+#define ZOOM_SRC_CENTER_X (IMAGE_WIDTH_ZOOM_FUNC / 2)
+#define ZOOM_SRC_CENTER_Y (IMAGE_HEIGHT_ZOOM_FUNC / 2)
+
+#define CRYSTAL_DIAMETER (93)
Canvas2D_ContextClass canvas2d;
@@ -42,16 +44,10 @@
}
}
-void Get_AnimationTiming(char_t *timing_name) {
- R_Get_AnimationTimingFunction(timing_name, &accelerator);
-}
+void RGA_Func_DrawTopScreen(frame_buffer_t* frmbuf_info) {
+ /* Clear */
+ canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
-void RGA_Func_ClrScreen(frame_buffer_t* frmbuf_info) {
- /* Clear the display in white */
- canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
-}
-
-void RGA_Func_DrawTopScreen(frame_buffer_t* frmbuf_info) {
/* Draw a image */
canvas2d.drawImage(TopScrn_jpg_File, 0, 0);
@@ -59,56 +55,54 @@
R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
}
-void RGA_Func_DrawReturnButton(frame_buffer_t* frmbuf_info) {
- /* Draw a image */
+void RGA_Func_DrawRectangle(frame_buffer_t* frmbuf_info, draw_rectangle_pos_t * pos, int pos_num) {
+ int cnt;
+
+ /* Clear */
+ canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+
+ /* Draw description */
+ canvas2d.drawImage(decs_swipe_jpg_File, 230, 400);
+
+ /* Draw rectangle */
+ for (cnt = 0; cnt < pos_num; cnt++) {
+ canvas2d.fillStyle = pos->style;
+ canvas2d.fillRect(pos->x, pos->y, pos->w, pos->h);
+ pos++;
+ }
+
+ /* Draw return button */
canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
/* Complete drawing */
R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
}
-void RGA_Func_DrawRectangle(frame_buffer_t* frmbuf_info) {
+void RGA_Func_DrawImage(frame_buffer_t* frmbuf_info, int x, int y) {
+ int draw_pos_x = x - (CRYSTAL_DIAMETER / 2);
+ int draw_pos_y = y - (CRYSTAL_DIAMETER / 2);
+
/* Clear */
canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
- /* Draw red rectangle */
- canvas2d.fillStyle = "#FF0000";
- canvas2d.fillRect(0, 0, 160, 240);
- canvas2d.fillRect(160, 240, 160, 240);
- /* Draw green rectangle */
- canvas2d.fillStyle = "#00FF00";
- canvas2d.fillRect(160, 0, 160, 240);
- canvas2d.fillRect(320, 240, 160, 240);
- /* Draw blue rectangle */
- canvas2d.fillStyle = "#0000FF";
- canvas2d.fillRect(320, 0, 160, 240);
- canvas2d.fillRect(480, 240, 160, 240);
- /* Draw black rectangle */
- canvas2d.fillStyle = "#000000";
- canvas2d.fillRect(480, 0, 160, 240);
- canvas2d.fillRect(640, 240, 160, 240);
- /* Draw write rectangle */
- canvas2d.fillStyle = "#FFFFFF";
- canvas2d.fillRect(640, 0, 160, 240);
- canvas2d.fillRect(0, 240, 160, 240);
- /* Complete drawing */
- R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
-}
+ /* Draw description */
+ canvas2d.drawImage(decs_swipe_jpg_File, 230, 400);
-void RGA_Func_DrawImage(frame_buffer_t* frmbuf_info) {
- /* Clear */
- canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
/* Draw the first image */
canvas2d.drawImage(Flower_jpg_File, 100, 100);
+
/* Draw the second image */
if ((frmbuf_info->pixel_format == PIXEL_FORMAT_ARGB8888) || (frmbuf_info->pixel_format == PIXEL_FORMAT_XRGB8888)) {
- canvas2d.drawImage(Crystal_png_ARGB8888, 280, 70);
+ canvas2d.drawImage(Crystal_png_ARGB8888, draw_pos_x, draw_pos_y);
} else if (frmbuf_info->pixel_format != PIXEL_FORMAT_YUV422) {
- canvas2d.drawImage(Crystal_png_ARGB4444, 280, 70);
+ canvas2d.drawImage(Crystal_png_ARGB4444, draw_pos_x, draw_pos_y);
} else {
- canvas2d.drawImage(Crystal_png_File, 280, 70);
+ canvas2d.drawImage(Crystal_png_File, draw_pos_x, draw_pos_y);
}
+ /* Draw return button */
+ canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
+
/* Complete drawing */
R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
}
@@ -117,14 +111,23 @@
/* Dissolve = Fade Out + Fade In */
/* Clear */
canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+
+ /* Draw description */
+ canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
+
/* fade Out */
canvas2d.globalAlpha = 1.0f - global_alpha;
canvas2d.drawImage(Flower_jpg_File, 100, 100);
+
/* fade In */
canvas2d.globalAlpha = global_alpha;
canvas2d.drawImage(Landscape_jpg_File, 100, 100);
canvas2d.globalAlpha = 1.0f;
+
+ /* Draw return button */
+ canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
+
/* Complete drawing */
R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
}
@@ -132,11 +135,18 @@
void RGA_Func_Scroll(frame_buffer_t* frmbuf_info, int src_width_pos) {
/* Clear */
canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+
+ /* Draw description */
+ canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
+
/* Scroll from left to right */
canvas2d.drawImage(Landscape_wide_jpg_File,
/* src */ src_width_pos, 25, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT,
/* dst */ 100, 100, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT);
+ /* Draw return button */
+ canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
+
/* Complete drawing */
R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
}
@@ -144,6 +154,10 @@
void RGA_Func_Zoom(frame_buffer_t* frmbuf_info, int src_height_pos) {
/* Clear */
canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+
+ /* Draw description */
+ canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
+
/* Zoom out */
canvas2d.drawImage(Landscape_wide_jpg_File,
/* src X */ ZOOM_SRC_CENTER_X - (src_height_pos * IMG_DRAW_WIDTH / IMG_DRAW_HEIGHT),
@@ -152,6 +166,9 @@
/* src H */ src_height_pos * 2,
/* dst */ 100, 100, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT);
+ /* Draw return button */
+ canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
+
/* Complete drawing */
R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
}
@@ -160,28 +177,86 @@
/* Rotate the image to the right */
/* Clear */
canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+
+ /* Draw description */
+ canvas2d.drawImage(decs_swipe_side_jpg_File, 140, 400);
+
/* Move to drawing position */
canvas2d.translate((100 + (IMG_DRAW_WIDTH / 2)), (100 + (IMG_DRAW_HEIGHT / 2)));
+
/* Rotate */
canvas2d.rotate(image_angle * (3.14159 / 180));
+
/* Move to center to rotate */
canvas2d.translate((-IMG_DRAW_WIDTH / 2), (-IMG_DRAW_HEIGHT / 2));
canvas2d.drawImage(Flower_jpg_File, 0, 0);
canvas2d.setTransform(1, 0, 0, 1, 0, 0);
+ /* Draw return button */
+ canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
+
/* Complete drawing */
R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
}
-void RGA_Func_Accelerate(frame_buffer_t* frmbuf_info, float32_t relative_pos) {
+void RGA_Func_Accelerate(frame_buffer_t* frmbuf_info, int animation_timing, float32_t relative_pos) {
/* Do accelerated motion from right to left */
int position;
/* Clear */
canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+
+ if (relative_pos == 0.0f) {
+ switch (animation_timing) {
+ case ANIMATION_TIMING_EASE:
+ R_Get_AnimationTimingFunction("ease", &accelerator);
+ break;
+ case ANIMATION_TIMING_LINEAR:
+ R_Get_AnimationTimingFunction("linear", &accelerator);
+ break;
+ case ANIMATION_TIMING_EASE_IN:
+ R_Get_AnimationTimingFunction("ease-in", &accelerator);
+ break;
+ case ANIMATION_TIMING_EASE_OUT:
+ R_Get_AnimationTimingFunction("ease-out", &accelerator);
+ break;
+ case ANIMATION_TIMING_EASE_IN_OUT:
+ default:
+ R_Get_AnimationTimingFunction("ease-in-out", &accelerator);
+ break;
+ }
+ }
+
+ /* Draw rectangle */
+ canvas2d.fillStyle = "#0000FF"; /* blue */
+ switch (animation_timing) {
+ case ANIMATION_TIMING_EASE:
+ canvas2d.fillRect(17, 420, 136, 10);
+ break;
+ case ANIMATION_TIMING_LINEAR:
+ canvas2d.fillRect(173, 420, 136, 10);
+ break;
+ case ANIMATION_TIMING_EASE_IN:
+ canvas2d.fillRect(330, 420, 136, 10);
+ break;
+ case ANIMATION_TIMING_EASE_OUT:
+ canvas2d.fillRect(487, 420, 136, 10);
+ break;
+ case ANIMATION_TIMING_EASE_IN_OUT:
+ default:
+ canvas2d.fillRect(644, 420, 136, 10);
+ break;
+ }
+
+ /* Draw button */
+ canvas2d.drawImage(animetion_timing_jpg_File, 0, 370);
+
position = R_ANIMATION_TIMING_FUNCTION_GetValue(accelerator, relative_pos, 550.0f, 10.0f);
canvas2d.drawImage(Flower_jpg_File, position, 100);
+ /* Draw return button */
+ canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
+
/* Complete drawing */
R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
}
