• MacTech Network:
  • Tech Support
  • |
  • MacForge.net
  • |
  • Apple News
  • |
  • Register Domains
  • |
  • SSL Certificates
  • |
  • iPod Deals
  • |
  • Mac Deals
  • |
  • Mac Book Shelf

MAC TECH

  • Home
  • Magazine
    • About MacTech in Print
    • Issue Table of Contents
    • Subscribe
    • Risk Free Sample
    • Back Issues
    • MacTech DVD
  • Archives
    • MacTech Print Archives
    • MacMod
    • MacTutor
    • FrameWorks
    • develop
  • Forums
  • News
    • MacTech News
    • MacTech Blog
    • MacTech Reviews and KoolTools
    • Whitepapers, Screencasts, Videos and Books
    • News Scanner
    • Rumors Scanner
    • Documentation Scanner
    • Submit News or PR
    • MacTech News List
  • Store
  • Apple Expo
    • by Category
    • by Company
    • by Product
  • Job Board
  • Editorial
    • Submit News or PR
    • Writer's Kit
    • Editorial Staff
    • Editorial Calendar
  • Advertising
    • Benefits of MacTech
    • Mechanicals and Submission
    • Dates and Deadlines
    • Submit Apple Expo Entry
  • User
    • Register for Ongoing Raffles
    • Register new user
    • Edit User Settings
    • Logout
  • Contact
    • Customer Service
    • Webmaster Feedback
    • Submit News or PR
    • Suggest an article
  • Connect Tools
    • MacTech Live Podcast
    • RSS Feeds
    • Twitter

ADVERTISEMENT

Volume Number: 14 (1998)
Issue Number: 7
Column Tag: Tips & Tidbits

Jul 98 Tips & Tidbits

by Steve Sisak

Here is a code to draw rotated QuickDraw picture without QuickDraw GX.

You can find the project files at http://www.bekkoame.or.jp/~iimori/tmp/StdPix.hqx

//
//  Rotate QuickDraw picture with StdPix bottleneck procedure.
//
#include <ImageCompression.h>
#include <GXMath.h>         // fl(),ff() macros
#include <stdio.h>         // use SIOUX window to draw on

void    main()
{
enum {
      kBWSmallMacOSLogo   =   -16501,   // use MacOS Logo
      kSmallMacOSLogo     =   -16503,
      kBigMacOSLogo       =   -16506
};

      PicHandle                 picHnd   =   nil;
      ImageDescriptionHandle   descHnd   =   nil;

      printf("\n");            // initialize Toolbox
      ::SetPort(::FrontWindow());

      long      response;         // examine QuickTime existence
      OSErr   err =   ::Gestalt(gestaltQuickTime,&response);
      if   ( err )   goto rtn;

      CodecInfo   codecInfo;   // examine QuickDrawCodec existence
      err = ::GetCodecInfo(&codecInfo,kQuickDrawCodecType,anyCodec);
      if   ( err )   goto rtn;

      picHnd = ::GetPicture(kSmallMacOSLogo);
      if   (picHnd == nil)   goto rtn;

      ::HNoPurge((Handle)picHnd);
      ::DetachResource((Handle)picHnd);
      Rect      picRect = (**picHnd).picFrame;

      MatrixRecord      matrix;
      ::SetIdentityMatrix(&matrix);
      Rect    r(picRect);
      ::OffsetRect(&r,40 - r.left,40 - r.top);
      ::RectMatrix(&matrix,&picRect,&r);   // move to (40,40)
      ::RotateMatrix(&matrix,ff(30),         // rotate 30 degree
                              ff((r.left + r.right)/2),
                              ff((r.top + r.bottom)/2));

      descHnd =
(ImageDescriptionHandle)::NewHandleClear
                                             (sizeof(ImageDescription));
      if (descHnd == nil)   goto rtn;

      {
      ImageDescription&      desc = **descHnd;

            desc.idSize           = sizeof(ImageDescription);
            desc.cType            = kQuickDrawCodecType;
            desc.temporalQuality  = codecLosslessQuality;
            desc.spatialQuality   = codecLosslessQuality;
            desc.width            = picRect.right - picRect.left;
            desc.height           = picRect.bottom - picRect.top;
            desc.hRes             = ff(72);
            desc.vRes             = ff(72);
            desc.dataSize         = ::GetHandleSize((Handle)picHnd);
            desc.frameCount       = 1;
            desc.depth            = 32;
            desc.clutID           = -1;
      }

      ::HLock((Handle)picHnd);
      PixMap  pixMap;
      err = ::SetCompressedPixMapInfo
                        (&pixMap,descHnd,*(Handle)picHnd,0,nil,nil);
      if ( err )   goto rtn;

      StdPixUPP         uppStdPix;
      const CQDProcs   *CQDProcPtr = 
                                    ((CGrafPtr)qd.thePort)->grafProcs;
      if   ( CQDProcPtr ) {
            uppStdPix = (StdPixUPP)CQDProcPtr->newProc1;
      }else{
            CQDProcs         stdProcs;
            ::SetStdCProcs(&stdProcs);
            uppStdPix = (StdPixUPP)stdProcs.newProc1;
      }

CallStdPixProc(uppStdPix,&pixMap,&picRect,&matrix,ditherCopy,

nil,nil,nil,callOldBits|callStdBits);
rtn:
   if ( descHnd ) {
         ::DisposeHandle((Handle)descHnd);
      }
      if ( picHnd ) {
            ::KillPicture(picHnd);
      }
}

Hideaki Iimori
iimori@lib.bekkoame.or.jp

 
MacTech Only Search:
Community Search:

 
 
 

 
 
 
 
 
  • SPREAD THE WORD:
  • Slashdot
  • Digg
  • Del.icio.us
  • Reddit
  • Newsvine
  • Generate a short URL for this page:



MacTech Magazine. www.mactech.com
Toll Free 877-MACTECH, Outside US/Canada: 805-494-9797
MacTech is a registered trademark of Xplain Corporation. Xplain, "The journal of Apple technology", Apple Expo, Explain It, MacDev, MacDev-1, THINK Reference, NetProfessional, Apple Expo, MacTech Central, MacTech Domains, MacNews, MacForge, and the MacTutorMan are trademarks or service marks of Xplain Corporation. Sprocket is a registered trademark of eSprocket Corporation. Other trademarks and copyrights appearing in this printing or software remain the property of their respective holders.
All contents are Copyright 1984-2010 by Xplain Corporation. All rights reserved. Theme designed by Icreon.
 
Nov. 20: Take Control of Syncing Data in Sow Leopard' released
Nov. 19: Cocktail 4.5 (Leopard Edition) released
Nov. 19: macProVideo offers new Cubase tutorials
Nov. 18: S Stardom anounces Safe Capsule, a companion piece for Apple's
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live