Image Zoom In/out Sample. This program uses GraphicsFramework library and GP2Y0A21YK sensor. Please use distance sensor in the range of 10-30cm.
Dependencies: GR-PEACH_video GraphicsFramework R_BSP mbed-rtos mbed
Fork of RGA_HelloWorld by
About GP2Y0A21YK
GP2Y0A21YK is a distance sensor and can be controlled by using the AnalogIn.
The range of this sensor is 10-80cm.
- Datasheet of GP2Y0A21YK
https://www.sparkfun.com/datasheets/Components/GP2Y0A21YK.pdf
About wiring
| Sensor | GR-PEACH |
| White wire | A0 |
| Orange wire | GND |
| Black wire | 5.0V |
Diff: rga_func.cpp
- Revision:
- 0:84e4649e7707
- Child:
- 1:a07212e32dcb
- Child:
- 2:c7faef0ef374
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rga_func.cpp Wed Jan 20 02:35:42 2016 +0000
@@ -0,0 +1,187 @@
+/*
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+#include "mbed.h"
+#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
+
+Canvas2D_ContextClass canvas2d;
+
+static animation_timing_function_t* accelerator;
+
+void Set_RGAObject(frame_buffer_t* frmbuf_info) {
+ errnum_t err;
+ Canvas2D_ContextConfigClass config;
+
+ config.frame_buffer = frmbuf_info;
+ canvas2d = R_RGA_New_Canvas2D_ContextClass(config);
+ err = R_OSPL_GetErrNum();
+ if (err != 0) {
+ printf("Line %d, error %d\n", __LINE__, err);
+ while (1);
+ }
+}
+
+void Get_AnimationTiming(char_t *timing_name) {
+ R_Get_AnimationTimingFunction(timing_name, &accelerator);
+}
+
+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);
+
+ /* Complete drawing */
+ R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
+}
+
+void RGA_Func_DrawReturnButton(frame_buffer_t* frmbuf_info) {
+ /* Draw a image */
+ canvas2d.drawImage(RetBtn_jpg_File, 640, 10);
+
+ /* Complete drawing */
+ R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
+}
+
+void RGA_Func_DrawRectangle(frame_buffer_t* frmbuf_info) {
+ /* 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);
+}
+
+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);
+ } else if (frmbuf_info->pixel_format != PIXEL_FORMAT_YUV422) {
+ canvas2d.drawImage(Crystal_png_ARGB4444, 280, 70);
+ } else {
+ canvas2d.drawImage(Crystal_png_File, 280, 70);
+ }
+
+ /* Complete drawing */
+ R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
+}
+
+void RGA_Func_Dissolve(frame_buffer_t* frmbuf_info, float32_t global_alpha) {
+ /* Dissolve = Fade Out + Fade In */
+ /* Clear */
+ canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+ /* 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;
+ /* Complete drawing */
+ R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
+}
+
+void RGA_Func_Scroll(frame_buffer_t* frmbuf_info, int src_width_pos) {
+ /* Clear */
+ canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+ /* 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);
+
+ /* Complete drawing */
+ R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
+}
+
+void RGA_Func_Zoom(frame_buffer_t* frmbuf_info, int src_height_pos) {
+ /* Clear */
+ canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+ /* Zoom out */
+ canvas2d.drawImage(Landscape_wide_jpg_File,
+ /* src X */ ZOOM_SRC_CENTER_X - (src_height_pos * IMG_DRAW_WIDTH / IMG_DRAW_HEIGHT),
+ /* src Y */ ZOOM_SRC_CENTER_Y - src_height_pos,
+ /* src W */ src_height_pos * 2 * IMG_DRAW_WIDTH / IMG_DRAW_HEIGHT,
+ /* src H */ src_height_pos * 2,
+ /* dst */ 100, 100, IMG_DRAW_WIDTH, IMG_DRAW_HEIGHT);
+
+ /* Complete drawing */
+ R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
+}
+
+void RGA_Func_Rotation(frame_buffer_t* frmbuf_info, graphics_matrix_float_t image_angle) {
+ /* Rotate the image to the right */
+ /* Clear */
+ canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+ /* 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);
+
+ /* Complete drawing */
+ R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
+}
+
+void RGA_Func_Accelerate(frame_buffer_t* frmbuf_info, float32_t relative_pos) {
+ /* Do accelerated motion from right to left */
+ int position;
+
+ /* Clear */
+ canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
+ position = R_ANIMATION_TIMING_FUNCTION_GetValue(accelerator, relative_pos, 550.0f, 10.0f);
+ canvas2d.drawImage(Flower_jpg_File, position, 100);
+
+ /* Complete drawing */
+ R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
+}
