home *** CD-ROM | disk | FTP | other *** search
/ Big Green CD 8 / BGCD_8_Dev.iso / NEXTSTEP / Graphics / ToyViewer-2.6a / src / ImageOpr.bproj / ImageNewmap.m < prev    next >
Encoding:
Text File  |  1996-09-28  |  2.7 KB  |  125 lines

  1. #import "../ImageOpr.h"
  2. #import <appkit/Application.h>
  3. #import <appkit/publicWraps.h>
  4. #import <appkit/NXBitmapImageRep.h>
  5. #import <appkit/Control.h>
  6. #import <appkit/Panel.h>
  7. #import <appkit/TextField.h>
  8. #import <stdio.h>
  9. #import <stdlib.h>
  10. #import <string.h>
  11. #import <libc.h>
  12. #import <streams/streams.h>
  13. #import "../TVController.h"
  14. #import "../ToyWin.h"
  15. #import "../ToyWinEPS.h"
  16. #import "../ToyView.h"
  17. #import "../common.h"
  18. #import "../getpixel.h"
  19. #import "imageOperation.h"
  20.  
  21.  
  22. @implementation ImageOpr (Newmap)
  23.  
  24. - newBitmap: sender
  25. {
  26.     ToyWin    *tw, *newtw = nil;
  27.     ToyView    *tv = NULL;
  28.     commonInfo    *cinf;
  29.     char    fn[256];
  30.     const char *fnam;
  31.     int err;
  32.  
  33.     if ((tw = [theController keyWindow]) == nil) {
  34.         NXBeep();
  35.         return self;
  36.     }
  37.     tv = [tw toyView];
  38.     cinf = [tv commonInfo];
  39.     fnam = [tw filename];
  40.     sprintf(fn, "%s(Bitmap)", fnam);
  41.  
  42.     if (cinf->type == Type_eps) {
  43.         NXStream *stream = [(ToyWinEPS *)tw openTiffStream:NO];
  44.         if (stream == NULL) {
  45.             errAlert(fnam, Err_MEMORY);
  46.             return self;
  47.         }
  48.         newtw = [[ToyWin alloc] init:tw by:NewBitmap];
  49.         err = [newtw drawFromFile:(const char *)fn or:stream];
  50.         NXCloseMemory(stream, NX_FREEBUFFER);
  51.         if (err) {
  52.             errAlert(fnam, err);
  53.             [newtw free];
  54.             return self;
  55.         }
  56.     }else {
  57.         NXBitmapImageRep *rep;
  58.         commonInfo *newinf;
  59.         unsigned char *map[MAXPLANE], *newmap[MAXPLANE];
  60.         float factor = [tv scaleFactor];
  61.         if (factor == 1.0) {
  62.             warnAlert(fnam, Err_OPR_IMPL);
  63.             return self;
  64.         }
  65.         rep = (NXBitmapImageRep *)[[tv image] bestRepresentation];
  66.         [rep getDataPlanes: map];
  67.         newinf = makeResizedMap(factor, cinf, map, newmap);
  68.         if (newinf == NULL) {
  69.             warnAlert(fnam, Err_MEMORY);
  70.             return self;
  71.         }
  72.         newtw = [[ToyWin alloc] init:tw by:NewBitmap];
  73.         [newtw initLocateWindow:fn
  74.             width:newinf->width height:newinf->height];
  75.         [newtw makeComment: newinf from: cinf];
  76.         [newtw drawView:newmap info: newinf];
  77.     }
  78.     [theController newWindow: newtw];
  79.     return self;
  80. }
  81.  
  82.  
  83. - EPSResize: sender
  84. {
  85.     ToyWin    *tw, *newtw = nil;
  86.     ToyView    *tv = NULL;
  87.     NXStream *stream;
  88.     commonInfo    *cinf;
  89.     char    fn[256];
  90.     const char *fnam;
  91.     int err;
  92.  
  93.     if ((tw = [theController keyWindow]) == nil
  94.     || [(tv = [tw toyView]) scaleFactor] == 1.0) {
  95.         NXBeep();
  96.         return self;
  97.     }
  98.     cinf = [tv commonInfo];
  99.     fnam = [tw filename];
  100.     sprintf(fn, "%s(ResizeEPS)", fnam);
  101.  
  102.     if (cinf->type != Type_eps) {
  103.         errAlert(fnam, Err_EPS_ONLY);
  104.         return self;
  105.     }
  106.  
  107.     stream = [(ToyWinEPS *)tw resizeEPS:[tv scaleFactor] name:fn error:&err];
  108.     if (stream == NULL) {
  109.         errAlert(fnam, err);
  110.         return self;
  111.     }
  112.     newtw = [[ToyWinEPS alloc] init:tw by:ResizeEPS];
  113.     err = [newtw drawFromFile:(const char *)fn or:stream];
  114.     NXCloseMemory(stream, NX_FREEBUFFER);
  115.     if (err) {
  116.         errAlert(fnam, err);
  117.         [newtw free];
  118.         return self;
  119.     }
  120.     [theController newWindow: newtw];
  121.     return self;
  122. }
  123.  
  124. @end
  125.