• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      用C++開發(fā)圖片批量處理軟件

      2009-07-24 08:51:42
      中國教育信息化 2009年6期
      關(guān)鍵詞:文件名批量像素

      曹 娜

      一、需求分析

      筆者從事國畫教學(xué)工作,但也是一個(gè)編程發(fā)燒友,在長期從事畫畫的創(chuàng)作中,利用信息化手段,將創(chuàng)造作品保存到計(jì)算機(jī)里,通過網(wǎng)絡(luò)可以和同行進(jìn)行交流,也可以將自己的作品公布到網(wǎng)站上,為教學(xué)研究開創(chuàng)了一條創(chuàng)新之路。但在通過網(wǎng)絡(luò)交流的時(shí)候遇到了一個(gè)很大的問題,用數(shù)碼相機(jī)或者掃描儀,獲取的圖片字節(jié)數(shù)太大,少則幾兆,多則幾十兆,給網(wǎng)絡(luò)傳輸和網(wǎng)站公布都帶來了不少的麻煩,通過PS能夠?qū)⑦@些大字節(jié)數(shù)的圖片文件處理為大小適中的圖片(以便使備份與同行相互遠(yuǎn)程傳輸也顯得比較容易)。但不能夠自動批量處理,而其有版權(quán)的問題,經(jīng)過半年的努力,筆者用C++開發(fā)了自動批量處理的圖片處理軟件。

      軟件開發(fā)考慮到可應(yīng)用到其他領(lǐng)域,因此需考慮通用的因素,軟件進(jìn)入界面如圖1所示。

      二、軟件功能

      1.視頻瀏覽:如果當(dāng)前文件夾下有視頻文件,可以進(jìn)行瀏覽,只能播放mpeg格式,如果圖片文件列表第一個(gè)文件是視頻格式文件,就自動播放,如果要處理圖片文件,單擊“結(jié)束視頻”。

      2.轉(zhuǎn)換圖片:單擊文件列表框文件,單擊“轉(zhuǎn)換設(shè)置”顯示當(dāng)前選準(zhǔn)圖片的像素高度和寬度,保持圖片縱橫比保持圖片不變形,輸入要轉(zhuǎn)換的像素?cái)?shù)據(jù),按照原圖片的縱橫比計(jì)算相對應(yīng)的像素,并加以顯示。選擇“轉(zhuǎn)換當(dāng)前圖片”,是指轉(zhuǎn)換當(dāng)前選準(zhǔn)的圖片,選擇“連續(xù)轉(zhuǎn)換”是指自動連續(xù)轉(zhuǎn)換左邊文件列表框內(nèi)的所有圖片文件,按照統(tǒng)一像素尺寸、同一格式進(jìn)行轉(zhuǎn)換,這種情況適用于圖片大小格式一樣的一組照片;“轉(zhuǎn)換文件另存”是指轉(zhuǎn)換成的目標(biāo)文件另存為,原文件名_1.jpg,

      “覆蓋原文件”是指轉(zhuǎn)換動作完成生成的文件名就是選準(zhǔn)的文件名,將原文件名覆蓋,這種覆蓋無法恢復(fù)。

      3.可用于教師編寫專業(yè)教材時(shí),對教材插圖的處理,利用單個(gè)圖片文件的處理。

      三、代碼實(shí)現(xiàn)

      單擊“執(zhí)行”(Button7)事件函數(shù)

      void__fastcall TForm1::Button7Click(TObject *Sender)

      {

      Form1->Button8->Enabled=false;

      Form1->Panel6->Visible=false;

      if(Form1->RadioButton1->Checked==true)//轉(zhuǎn)換當(dāng)前圖片

      {

      ppc=ppc.LowerCase();

      int k=ppc.Pos(".jpg");

      int k1=ppc.Pos(".jpeg");

      int j=ppc.Pos(".bmp");

      if(j>0 || k>0 || k1>0)

      {

      WRJPG(ppc);//-----轉(zhuǎn)換函數(shù)

      Application->MessageBox("圖片大小轉(zhuǎn)換成功","信息",48);

      Form1->FileListBox1->Update();

      }

      else

      {

      String kdv="";

      kdv=kdv+ppc+"不是圖片文件,所以無法轉(zhuǎn)換";

      Application->MessageBox(kdv.c_str(),"信息",48);

      }

      }

      if(Form1->RadioButton2->Checked==true)//連續(xù)轉(zhuǎn)換

      {

      int mk=Form1->FileListBox1->Items->Count;//獲取圖片文件列表總數(shù)

      int ndkf=0;

      Form1->ProgressBar1->Min=0;

      Form1->ProgressBar1->Max=mk;

      Form1->ProgressBar1->Visible=true;

      for(int i=0;i<mk;i++)//---執(zhí)行連續(xù)轉(zhuǎn)換循環(huán)

      {

      Form1->ProgressBar1->Position=i;

      Application->ProcessMessages();

      ppc=Form1->FileListBox1->Items->Strings[i];

      ppc=ppc.LowerCase();

      int k=ppc.Pos(".jpg");

      int k1=ppc.Pos(".jpeg");

      int j=ppc.Pos(".bmp");

      if(j>0 || k>0 || k1>0)

      {

      try {

      Form1->Image1->Picture->LoadFromFile(ppc);

      ndkf=ndkf+1;

      WRJPG(ppc);//--核心轉(zhuǎn)換函數(shù)

      }

      catch(...){}

      }

      }

      Form1->ProgressBar1->Position=mk;

      Form1->ProgressBar1->Visible=false;

      Form1->FileListBox1->Update();

      String dkc="";

      dkc=dkc+"共有"+IntToStr(ndkf).c_str()+"個(gè)圖片文件進(jìn)行成功轉(zhuǎn)換"; ;

      Application->MessageBox(dkc.c_str(),"信息",48);

      }

      Form1->Button8->Enabled=true;

      }

      核心轉(zhuǎn)換函數(shù)WRJPG();

      void __fastcall TForm1::WRJPG(AnsiString filename)

      {

      if(p<=0 || q<=0) return ;//轉(zhuǎn)換像素的寬度和高度

      if(p>0 && q>0)

      {

      Graphics::TBitmap *tmpBitmap = new Graphics::TBitmap();//動態(tài)生成位圖類

      Graphics::TBitmap *tmpBitmap2 = new Graphics::TBitmap();//動態(tài)生成位圖類

      TJPEGImage*tmpBitmap1 = new TJPEGImage();//動態(tài)生成JPG類

      filename=filename.LowerCase();

      int lq=filename.Pos(".bmp");

      int lp=filename.Pos(".jpg");

      int lp1=filename.Pos(".jpeg");

      if(lp>0 || lp1>0) {

      tmpBitmap1->LoadFromFile(filename);//將位圖裝載到生成的位圖類tmpBitmap1

      tmpBitmap->Assign(tmpBitmap1);//將位圖類轉(zhuǎn)換為jpg類

      }

      if(lq>0)

      tmpBitmap->LoadFromFile(filename);

      tmpBitmap2->W(wǎng)idth=q;

      tmpBitmap2->Height=p;

      tmpBitmap2->Canvas->StretchDraw(Rect

      (0,0,tmpBitmap2->W(wǎng)idth,tmpBitmap2->Height),tmpBitmap);//將轉(zhuǎn)換目標(biāo)像素畫布

      TJPEGImage *jp = new TJPEGImage();

      try

      {

      //將位圖文件寫入TJPEGImage 類

      jp->Assign(tmpBitmap2);

      jp->CompressionQuality = 85;//指的是轉(zhuǎn)換質(zhì)量,100為最高質(zhì)量,加上這句就可以了

      jp->Compress();//執(zhí)行寫入

      AnsiString jpc,jpd;

      //int l0=filename.Length();

      int l1=filename.Pos(".");

      if(l1>0)//有擴(kuò)展名

      {

      jpc=filename.SubString(1,l1-1);

      if(Form1->RadioButton4->Checked==true)//覆蓋原圖片文件

      {

      if(lp1>0)

      jpc=jpc+".jpeg";

      else

      jpc=jpc+".jpg";

      }

      if(Form1->RadioButton3->Checked==true)//另存為文件

      {

      if(lp1>0)

      jpc=jpc+"_1.jpeg";

      else

      jpc=jpc+"_1.jpg";//原文件名+“_1.jpg”

      }

      }

      if(l1<=0)//沒有擴(kuò)展名

      {

      jpc=filename;

      if(Form1->RadioButton4->Checked==true)

      {

      if(lp1>0)

      jpc=jpc+".jpeg";

      else

      jpc=jpc+".jpg";

      }

      if(Form1->RadioButton3->Checked==true)

      {

      if(lp1>0)

      jpc=jpc+"_1.jpeg";

      else

      jpc=jpc+"_1.jpg";

      }

      }

      //Application->MessageBox(jpc.c_str(),filename.c_str(),48);

      jp->SaveToFile(jpc);//將jpg類保存為jpc文件

      }

      __finally

      {

      delete jp;//刪除jp類

      }

      delete tmpBitmap;

      delete tmpBitmap1;

      delete tmpBitmap2;

      }//p>0 && q>0

      }

      猜你喜歡
      文件名批量像素
      趙運(yùn)哲作品
      藝術(shù)家(2023年8期)2023-11-02 02:05:28
      像素前線之“幻影”2000
      批量提交在配置分發(fā)中的應(yīng)用
      右鍵調(diào)用多重更名更方便
      電腦愛好者(2019年9期)2019-10-30 03:43:29
      Excel輕松提取文件名
      “像素”仙人掌
      高像素不是全部
      CHIP新電腦(2016年3期)2016-03-10 14:22:03
      淺議高校網(wǎng)銀批量代發(fā)
      不讓長文件名成為“絆腳石”
      電腦迷(2014年8期)2014-04-29 07:37:40
      基于AUTOIT3和VBA的POWERPOINT操作題自動批量批改
      河东区| 临海市| 贡山| 永德县| 宜兰市| 石狮市| 秭归县| 茌平县| 建水县| 巨鹿县| 琼中| 宜丰县| 湘乡市| 彰化市| 岚皋县| 射洪县| 河源市| 康定县| 安阳县| 惠来县| 宜章县| 保靖县| 三穗县| 阿尔山市| 洞头县| 临夏县| 隆安县| 冕宁县| 义马市| 宜章县| 中江县| 洛川县| 瑞昌市| 永宁县| 芜湖县| 贵定县| 自贡市| 河津市| 疏勒县| 北安市| 思南县|