|
|
/******************************Module*Header*******************************\
* Module Name: CImaging.cpp * * This file contains the code to support the functionality test harness * for GDI+. This includes menu options and calling the appropriate * functions for execution. * * Created: 05-May-2000 - Jeff Vezina [t-jfvez] * * Copyright (c) 2000 Microsoft Corporation * \**************************************************************************/ #include "CImaging.h"
CImaging::CImaging(BOOL bRegression) { strcpy(m_szName,"Image : Misc"); m_bRegression=bRegression; }
CImaging::~CImaging() { }
BOOL CALLBACK CImaging::MyDrawImageAbort(VOID* data) { UINT *count = (UINT*) data;
*count += 1;
return FALSE; }
void CImaging::Draw(Graphics *g) {
Point points[4]; REAL width = 4; // Pen width
WCHAR filename[256]; wcscpy(filename,L"..\\data\\4x5_trans_Q60_cropped_1k.jpg");
// Open the image with the appropriate ICM mode.
Bitmap *bitmap = new Bitmap(filename, TRUE);
// Create a texture brush.
Unit u; RectF copyRect; bitmap->GetBounds(©Rect, &u);
// Choose an interesting portion of the source image to display
// in the texture brush.
copyRect.X = copyRect.Width/2-1; copyRect.Width = copyRect.Width/4-1; copyRect.X += copyRect.Width; copyRect.Height = copyRect.Height/2-1; // Our ICM profile is hacked to flip the red and blue color channels
// Apply a recolor matrix to flip them back so that if something breaks
// ICM, the picture will look blue instead of the familiar colors.
ImageAttributes *img = new ImageAttributes(); img->SetWrapMode(WrapModeTile, Color(0xffff0000), FALSE); ColorMatrix flipRedBlue = {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}; img->SetColorMatrix(&flipRedBlue); img->SetWrapMode(WrapModeTile, Color(0xffff0000), FALSE);
// Create a texture brush.
TextureBrush textureBrush(bitmap, copyRect, img);
// Create a radial gradient pen.
Color redColor(255, 0, 0);
SolidBrush redBrush(redColor); Pen redPen(&redBrush, width);
GraphicsPath *path;
points[0].X = (int)((float)(100*3+300)/1024.0f*TESTAREAWIDTH); points[0].Y = (int)((float)(60*3-100)/768.0f*TESTAREAHEIGHT); points[1].X = (int)((float)(-50*3+300)/1024.0f*TESTAREAWIDTH); points[1].Y = (int)((float)(60*3-100)/768.0f*TESTAREAHEIGHT); points[2].X = (int)((float)(150*3+300)/1024.0f*TESTAREAWIDTH); points[2].Y = (int)((float)(250*3-100)/768.0f*TESTAREAHEIGHT); points[3].X = (int)((float)(200*3+300)/1024.0f*TESTAREAWIDTH); points[3].Y = (int)((float)(120*3-100)/768.0f*TESTAREAHEIGHT); path = new GraphicsPath(FillModeAlternate); path->AddBeziers(points, 4); g->FillPath(&textureBrush, path); g->DrawPath(&redPen, path);
delete img; delete path; delete bitmap;
// Draw the apple png
PointF destPoints[3];
destPoints[0].X = (float)300/1024.0f*TESTAREAWIDTH; destPoints[0].Y = (float)50/768.0f*TESTAREAHEIGHT; destPoints[1].X = (float)450/1024.0f*TESTAREAWIDTH; destPoints[1].Y = (float)50/768.0f*TESTAREAHEIGHT; destPoints[2].X = (float)240/1024.0f*TESTAREAWIDTH; destPoints[2].Y = (float)200/768.0f*TESTAREAHEIGHT; Matrix mat; mat.Translate(0, 100); mat.TransformPoints(&destPoints[0], 3); wcscpy(filename, L"../data/apple1.png"); bitmap = new Bitmap(filename); g->DrawImage(bitmap, &destPoints[0], 3); delete bitmap;
// Draw the dog png
destPoints[0].X = (float)30/1024.0f*TESTAREAWIDTH; destPoints[0].Y = (float)200/768.0f*TESTAREAHEIGHT; destPoints[1].X = (float)200/1024.0f*TESTAREAWIDTH; destPoints[1].Y = (float)200/768.0f*TESTAREAHEIGHT; destPoints[2].X = (float)200/1024.0f*TESTAREAWIDTH; destPoints[2].Y = (float)420/768.0f*TESTAREAHEIGHT;
wcscpy(filename, L"..\\data\\dog2.png"); bitmap = new Bitmap(filename); g->DrawImage(bitmap, &destPoints[0], 3); delete bitmap; // Draw the Balmer jpeg
wcscpy(filename, L"..\\data\\ballmer.jpg"); bitmap = new Bitmap(filename);
RectF destRect( TESTAREAWIDTH/2.0f, TESTAREAHEIGHT/2.0f, TESTAREAWIDTH/2.0f, TESTAREAHEIGHT/2.0f ); RectF srcRect; srcRect.X = 100; srcRect.Y = 40; srcRect.Width = 200; srcRect.Height = 200;
g->DrawImage( bitmap, destRect, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, UnitPixel );
delete bitmap; }
|