【PHP】負片效果


【目的】

  1. 呈現出類似底片的效果。

【程式】(negative.php)

  1. 法一
    <?php
    $img = imagecreatefrompng('lena_std.png');
    imageTrueColorToPalette($img,true,256);
    $numColors = imageColorsTotal($img);
    for ($x = 0; $x < $numColors; $x++)
      {
        list($r,$g,$b) = array_values(imageColorsForIndex($img,$x));
        $r = 255 - $r;
        $g = 255 - $g;
        $b = 255 - $b;
        imageColorSet($img,$x,$r,$g,$b);
      }
    imagepng($img,'lena_negative.png');
    imagedestroy($img);
    ?>
  2. 法二(還需驗證)
    <?php
    $im = imagecreatefrompng('lena_std.png');
    if($im && imagefilter($im, IMG_FILTER_NEGATE))
    {
      echo 'Reverses all colors of the imagee.';
      imagepng($im, 'lena_negative.png');
    }
     else
    {
      echo 'Reverses all colors failed.';
    }
    imagedestroy($im);
    ?>

【結果】(lena_negative.png)

image

【QT】QGridLayout


【目的】

  1. 練習QGrid用法。 基本使用方式
    void addWidget ( QWidget * widget, int row, int column, Qt::Alignment alignment = 0 )
    void addWidget ( QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0 )
  2. 練習如何以 sprintf 來指定 Qstring 內容。例如
    str.sprintf("Row Col<B>(%d,%d)</B>", i, j);
  3. 由於我常常會忘記那個方向是Row/Column,順便用這個範例來練習。

【程式】

#include <QApplication>
#include <QWidget>
#include <QGridLayout>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget *window = new QWidget;
window->setWindowTitle("QGridLayout Example");
window->resize(250, 100);
QGridLayout *layout = new QGridLayout;
layout->setSpacing(2);
layout->setMargin(2);
for(int i = 0; i < 3; i++)
{
  for(int j = 0; j < 3; j++)
  {
    QString str;
    str.sprintf("Row Col<B>(%d,%d)</B>", i, j);
    QLabel *label = new QLabel(str);
    label->setFrameStyle(QFrame::Panel + QFrame::Sunken);
    label->setMinimumSize(100, 0);
    label->setAlignment(Qt::AlignCenter);
    layout->addWidget(label, i, j);
  }
}
window->setLayout(layout);
window->show();
return app.exec();
}

【結果】

image

【備註】

另外的Layout元件

  1. QHBoxLayout
  2. QVBoxLayout(垂直 Vertical)

【參考】

  1. Qt4 Gossip: QGridLayout 版面配置
    http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/QGridLayout.html
  2. 網頁中的表格觀念(其實和html td 的 row/col 是一樣的)
    http://dob.tnc.edu.tw/themes/old/showPage.php?s=14&t=3

【QT】彩色轉單色


【目的】

  1. 顯示兩張圖片,左邊為原圖,右邊為原圖的單色圖。

【程式】

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QBitmap>
#include <QImage>
#include <QColor>

class PainterWidget : public QWidget {
protected:
    void paintEvent(QPaintEvent*);
};

void PainterWidget::paintEvent(QPaintEvent *event) {
    QImage img("lena_std.png");
    QImage org = img;
    QRgb value;
    QPainter painter(this);

    for (int dx=0; dx < img.width(); dx++)
    {
      for (int dy=0; dy < img.height(); dy++)
      {
        value = img.pixel(dx ,dy);
        int r = qRed(value);
        int g = qGreen(value);
        int b = qBlue(value);

        int a = (int)((r + g + b)/3);
        if (a>0x7f) {a=0xff;}
        else {a=0x00;}
        value = qRgb(a, a, a);
        img.setPixel(dx, dy, value);
      }
    }
    painter.drawImage(0, 0, org);
    painter.drawImage(0+org.width(), 0, img);

}

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    PainterWidget pWidget;
    pWidget.setWindowTitle("QImage Demo");
    pWidget.resize(600, 300);
    pWidget.show();
    return app.exec();
}

 

【結果】

image

【參考】

【PHP】圖形翻轉


【程式碼】
兩種作法。

  1. 摘自http://www.oklinux.cn/html/developer/php/jc/20070919/37668.html
    <?php
    $imgstream   =   file_get_contents('lena_std.png');   
    $im   =   imagecreatefromstring($imgstream);      
    $thumbw   =   imagesx($im);
    $thumbh   =   imagesy($im);
    if(function_exists("imagecreatetruecolor"))   
      $dim   =   imagecreatetruecolor($thumbw,   $thumbh);
    else   
      $dim   =   imagecreate($thumbh,   $thumbw);
    for($x=0;$x<$thumbw;$x++)
    {
      for($y=0;$y<$thumbh;$y++)
        {
         //左右對調
          imagecopyresized($dim,$im,$thumbw-$x-1,$y,$x,$y,1,1,1,1);
         //上下翻轉
          //imagecopyresized($dim,$im,$x,$thumbh-$y-1,$x,$y,1,1,1,1);
        }
    }   
    imagepng($dim,'lena_mirror.png');
    imagedestroy($dim);
    ?>
  2. ImageSetPixel
    <?php 
    $im   =   imagecreatefrompng('lena_std.png');      
    $thumbw   =   imagesx($im);
    $thumbh   =   imagesy($im);
        
    if(function_exists("imagecreatetruecolor"))   
      $dim   =   imagecreatetruecolor($thumbw,   $thumbh);
    else   
      $dim   =   imagecreate($thumbh,   $thumbw);
    
    for($x=0;$x<$thumbw;$x++)
    {
      for($y=0;$y<$thumbh;$y++)
        {
        $rgb = ImageColorAt ($im, $x, $y);
        ImageSetPixel ($dim, $thumbw-$x, $y, $rgb);
        }
    }   
    imagepng($dim,'lena_mirr.png');
    imagedestroy($dim);
    ?>

【結果】

  1. 原始圖片
    image
  2. 第一個作法的結果(imagecopyresized)
    image
  3. 第二個作法的結果
    類似上面。
 

Ed32. Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com