image ResEx Logo
ResExcellence www : Powered by Google
Cell Phone Themes Icons Mighty Mouse Cursors Software Reviews Widgets & Widgets

Articles
   3D
   Audio
   Custom Controls
   General RB
   Graphics
   Hacks
   Mac OS X
   Menus
   Novelty
   Printing
   REALbasic 2005
   REALbasic 2006
   Registration
   Resources
   Reviews
   Serial
   Speech
   Sockets
   XML
   Video
Resource Links
News
   Current News
   February 2006
   January 2006
   December 2005
   November 2005
   October 2005
   September 2005
   August 2005
   July 2005
   June 2005
   May 2005
   April 2005
   March 2005









REALbasic for Dummies
by Erick Tejkowski


Learning REALbasic through Applications
by Clayton E., Crooks II


REALbasic for Macintosh
by Michael Swaine


REALbasic Cross-Platform Application Development
by Mark S. Choate





Older files are in Stuffit 5 or greater format. Newer files are ".Zip". Download StuffIt Expander
Tell us about a bad link. Thank You!

Picture Extractor by Erick Tejkowsi
05-24-01

Printer Version




As a ResExcellence reader, you probably already know how cool Macintosh resources are. All sorts of information can be stored in resources, including text, icons, cursors, audio, and even graphics. This tutorial shows you how to extract 'PICT' resources from your favorite application and save them to disk in a more useable format - a PICT file.

Create the Interface

Launch REALbasic and open Window1, the default window found in each new project. Drag the following controls from the toolbar into the interface:

  • Listbox - default name: Listbox1; ColumnCount=1
  • Canvas - default name: Canvas1
  • PushButton - default name: PushButton1; Text="Open App"
  • PushButton - default name: PushButton2; Text="Save As Picture"
Rearrange the controls to create an interface that looks like this: 05-24_interface.jpg (11k)

If you haven't guessed already, this project will allow a user to choose any application and display the 'PICT' resources contained within. Thereafter, the user can save any of the 'PICT' resources as 'PICT' files.

Define the Properties

You are going to need access to two important pieces of information throughout the code:

  • FolderItem - The location of the application that you want to look inside
  • Picture - the currently selected picture in the list

Since you want access to these pieces of information throughout your code, you must declare these properties local to the window. To do so, double-click Window1 to open its Code Editor. Next select Edit->New Property and add a new property: f as FolderItem Next, add a Picture property: p as Picture By now, your Code Editor should look something like this:

05-24_window1props.jpg (18k)

Declare File Types

Now, before we go crazy adding code to the interface, we need to do one last bit of preparation. In this example, we want to give the user an opportunity to choose an application and later to save a 'PICT" file. By default, your application doesn't know anything about these two types of files. You have to describe them for your application to "know" what they are. To do so, select Edit->File Types and add the two file types pictured below:

AnyApplication: Describes what an application "looks like" to your application
05-24_anyapp.jpg (16k) image/x-pict: Describes what a 'PICT' file "looks like" to your application
05-24_imgx-pict.jpg (17k)

When you're finished adding the two file types, your File Types dialog should look like this:
05-24_filetypes.jpg (13k)

Add the Code

Now, it's time to add some code. First off, double-click PushButton1 and add the following code: dim rf as ResourceFork
dim picturecount, i as integer

f=GetOpenFolderItem("AnyApplication")
if f<>nil then
  //Open the resource fork
  rf = f.openresourcefork
  //Count the PICT resources
  picturecount = rf.ResourceCount("PICT")
  //Clear the Listbox
  ListBox1.DeleteAllRows

  if picturecount>0 then
  //Loop through the PICT resources in this file
    for i=1 to picturecount
      ListBox1.AddRow str(rf.ResourceID("PICT",i-1))
    next
  //Sort the list of numbers
    listBox1.headingindex=0
  end if

  rf.close
end if This code permits the user to select an application file (Type="AnyApplication"). If a file is selected, the code open's the applications resource fork and counts the number of 'PICT' resources within. If there are any 'PICT' resources, the code then loops through the 'PICT' resources and adds the resource number of each to Listbox1. Finally, it sorts the list of resource numbers (alphabetically) and close the resource fork of the file.

Next, open the Change event of Listbox1. To this event, add the following code: dim rsrcnumber as integer
dim rf as ResourceFork

if me.listindex>0 then
  //convert the text in the listbox to a number
  rsrcnumber = val (me.text)
  if f<>nil then
    //Open the resource fork and load the picture from it
    rf = f.openResourceFork
    p = rf.GetPicture(rsrcnumber)

    //Resize and refresh the Canvas
    Canvas1.width = p.width
    Canvas1.height = p.height
    Canvas1.Refresh

    //Close the resource fork
    rf.Close
  end if
end if This code executes each time a user selects something in the list box. In this case, the listbox should be full of 'PICT' resource numbers. When a user selects an item in the list, the code grabs the text from that list item and converts it to a number with the Val command. Next, the code checks for a valid FolderItem (named f) representing the application where these 'PICT' resources lie. Next, the code loads that 'PICT' resource from the file and stores it in the Picture p. Finally, we resize the Canvas to accomodate the picture resource, refresh the appearance of the canvas, and close the resrouce fork.

To make the picture display, add the following code to the Paint event of Canvas1. if p<>nil then
  //if there is a valid picture, draw it on this canvas
  g.DrawPicture p,0,0
end if

The final coding step shows you how to save the Picture (p) to an external file. Open the Action event of PushButton2 and add this code: dim PictureFile as FolderItem

if p<>nil then
  PictureFile = GetSaveFolderItem("image/x-pict",f.name+".pct")
  if PictureFile<>nil then
    PictureFile.SaveAsPicture(p)
  end if
end if

Test and Build the Application

There! That wasn't too tough, was it? To test your masterpiece, select Debug->Run. when you are convinced it is error free, select File->Build Application to build the final version. Since you will be opening 'PICT' resources with this application and 'PICT' resources can be potentially large, make sure to give the application a healthy RAM size for Mac OS 8/9 use.

As usual, you can also download:




Cell Phone Themes Icons Mighty Mouse Cursors Software Reviews Widgets & Widgets

Maintained by the Staff of ResExcellence. This entire site ©1997-2006 ResExcellence
Privacy Statement? Sure we gotta Privacy Statement. [an error occurred while processing this directive]