码迷,mamicode.com
首页 > 其他好文 > 详细

ImageBasics

时间:2014-12-18 11:47:27      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   ar   io   color   sp   for   on   

  1 //ImageBasics.cpp
  2 
  3 /*
  4 Copyright 2000-2004 The VCF Project.
  5 Please see License.txt in the top level directory
  6 where you installed the VCF.
  7 */
  8 
  9 
 10 #include "vcf/ApplicationKit/ApplicationKit.h"
 11 #include "vcf/GraphicsKit/Win32Image.h"
 12 #include "vcf/GraphicsKit/Pixels.h"
 13 
 14 
 15 
 16 using namespace VCF;
 17 
 18 /**
 19 This example will demonstrate some of the basics of
 20 working with images
 21 */
 22 
 23 
 24 class ImageBasicsWindow : public Window {
 25 public:
 26     ImageBasicsWindow() {
 27         setCaption( "ImageBasics" );        
 28     }
 29 
 30     virtual ~ImageBasicsWindow(){};
 31 
 32     virtual void paint( GraphicsContext* ctx ) {
 33         Window::paint( ctx );
 34 
 35         /**
 36         This will create an image from a given file name
 37         */
 38         Image* logoImage = GraphicsToolkit::createImage( "logo.bmp" );
 39 
 40         /**
 41         Simplest way to draw an image
 42         */
 43 
 44         double x = 20;
 45         double y = 20;
 46 
 47         ctx->drawImage( x, y, logoImage );
 48 
 49         y += logoImage->getHeight() + 20;
 50 
 51         /**
 52         Draw a portion of the image
 53         */
 54 
 55         Rect r( 0, 0, logoImage->getWidth(), logoImage->getHeight() );
 56         r.offset( x, y );
 57 
 58         //original bounds
 59         ctx->setColor( Color::getColor("black") );
 60         ctx->rectangle( &r );
 61         ctx->strokePath();
 62 
 63         r.inflate( -10, -10 );
 64 
 65         ctx->drawImageWithinBounds( &r, logoImage );
 66 
 67         y += logoImage->getHeight() + 20;
 68 
 69         String imageInfo = Format( "Image width: %d, height: %d")
 70                                      %logoImage->getWidth() % logoImage->getHeight();
 71 
 72         ctx->textAt( x, y, imageInfo );
 73 
 74         y += ctx->getTextHeight( imageInfo ) + 20;
 75 
 76         /**
 77         draw on the image
 78         */
 79         /**
 80         first lock the image
 81         */
 82         logoImage->beginDrawing();
 83 
 84         GraphicsContext* imgCtx = logoImage->getImageContext();
 85 
 86         /**
 87         draw a red rectangle on the image
 88         */
 89         imgCtx->setColor( Color::getColor("red") );
 90 
 91         imgCtx->rectangle( 20, 20, 100, 75 );
 92         imgCtx->fillPath();
 93 
 94         /**
 95         unlock the image makes sure the image pixels are uptodate
 96         */
 97         logoImage->finishedDrawing();
 98 
 99         /**
100         draw the image again
101         */
102         ctx->drawImage( x, y, logoImage );
103 
104         y += logoImage->getHeight() + 20;
105 
106         /**
107         bitblt a portion of the image context to our current ctx
108         */
109         logoImage->beginDrawing();
110         imgCtx = logoImage->getImageContext();
111 
112         Rect src(0,0,100,50);
113         Rect dest(10, y, 10 + src.getWidth(), y + src.getHeight() );
114 
115         ctx->copyContext( src, dest, imgCtx );
116 
117         logoImage->finishedDrawing();
118 
119         y += dest.getHeight() + 20;
120 
121         /**
122         Now draw the image transparently. Note that this does not use any sort
123         of alpha channel transparency
124         */
125 
126         logoImage->setIsTransparent( true );
127         logoImage->setTransparencyColor( Color::getColor("red") );
128 
129         ctx->drawImage( x, y, logoImage );
130 
131         y += logoImage->getHeight() + 20;
132 
133 
134         logoImage->setIsTransparent( false );
135         /**
136         Manipulate the pixel bits
137         */
138 
139         /**
140         retrieve the image bits - you‘ll get a pointer to
141         a SysPixelType
142         */
143         {
144             ColorPixels pix(logoImage);//->getImageBits()->pixels_;
145 
146                                         /**
147                                         Calculate the size, width * height
148             */
149             int size = logoImage->getHeight() * logoImage->getWidth();
150             /**
151             manipulate the values of the green color channel
152             */
153             for ( int i=0;i<size;i++ ) {
154                 pix[i].g = minVal<>( 255, pix[i].g + 50 );
155             }
156 
157 
158             ctx->drawImage( x, y, logoImage );
159         }
160 
161         /**
162         delete the image cause we don‘t need it anymore
163         */
164         delete logoImage;
165 
166     }
167 };
168 
169 
170 
171 
172 class ImageBasicsApplication : public Application {
173 public:
174 
175     ImageBasicsApplication( int argc, char** argv ) : Application(argc, argv) {
176 
177     }
178 
179     virtual bool initRunningApplication(){
180         bool result = Application::initRunningApplication();
181 
182         Window* mainWindow = new ImageBasicsWindow();
183         setMainWindow(mainWindow);
184 
185         mainWindow->setBounds( 100.0, 100.0, 400.0, 875.0 );
186         mainWindow->show();
187 
188 
189         return result;
190     }
191 
192 };
193 
194 
195 int main(int argc, char *argv[])
196 {
197     Application* app = new ImageBasicsApplication( argc, argv );
198 
199     Application::main();
200 
201     return 0;
202 }
203 
204 
205 /**
206 $Id: ImageBasics.cpp 2647 2006-04-28 16:42:38Z kdmix $
207 */

 

ImageBasics

标签:des   style   blog   ar   io   color   sp   for   on   

原文地址:http://www.cnblogs.com/elitiwin/p/4171173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!