2012-01-12 9 views
0

こんにちはすべてのC++エキスパート、Win32アプリケーションがピクセルを青、赤、または緑のフルカラーに変更する場合

もう一度私です。私はその点までまっすぐに行きます。

ビットマップ画像rgb色のピクセル(青色 - 178色、緑色 - 130色、赤色131)を取得できました。

私が次にやりたいことは、ピクセルをループして、画像が完全に青くなるようにすることです。

私はいくつかのループを試しましたが、うまくいきませんので、援助が必要です!(例:Blue-255、green-0、red-

/*for (int i = 0; i < test; i++) 
{ 
image[i].rgbtBlue; 
image[i].rgbtGreen; 
image[i].rgbtRed; 
}*/ 

しかし明らかにそれはうまくいきません、それが私が援助を必要とした理由です。それを追加するために、hfileは他の目的のために初期化されていたので、関連性があるとは思わなかった。すべてのコメントをいただき、ありがとうございます。

ありがとうございました!以下はコードです。

P.S:Microsoft Visual Studio 2010 - Win32アプリケーションを使用し、コンソールを使用しないでください。

#include "stdafx.h" 
#include "winmain.h" 
#include "Resource.h" 
#include <stdio.h> 
#include <windows.h> 
#include <iostream> 
#include <CommDlg.h> 
#include <stdint.h> 
#include <string> 
#include <WinGDI.h> 

HANDLE hfile2; 
DWORD written; 
BITMAPFILEHEADER bfh; 
BITMAPINFOHEADER bih; 
RGBTRIPLE *image; 

hfile2 = CreateFile(ofn.lpstrFile`, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_FLAG_OVERLAPPED, NULL); 
//Read the header 
ReadFile(hfile, &bfh, sizeof(bfh), &written, NULL); 
ReadFile(hfile, &bih, sizeof(bih), &written, NULL); 

// Read image 
int imagesize = bih.biWidth * bih.biHeight; // Helps you allocate memory for the image 
image = new RGBTRIPLE[imagesize]; // Create a new image (I'm creating an array during runtime 
ReadFile(hfile, image, imagesize * sizeof(RGBTRIPLE), &written, NULL); // Reads it off the disk 
get_pixel(bih.biWidth, bih.biHeight); 
int test = bih.biHeight * bih.biWidth * bih.biBitCount; 

RGBTRIPLE get_pixel(int x,int y) 
{ 
    // Image define from earlier 
    return image[(bih.biHeight-1-y)*bih.biWidth+x]; 
} 
+0

な '*'として機能し、二項演算子の引数の間にスペースを入れてください。それはすべての方法を読みやすくします。 –

+0

ここで、bfh、bih、hfileなどの型宣言はありますか? hfile2は初期化しますが、hfileは初期化しませんか?試したコードはどこにありますか?試したときに何が起きましたか? – fileoffset

+0

コードを編集し、私のコメントに追加、感謝! – Newbie

答えて

0

あなたのコメントはかなり正しいです。各要素image[i]は、RGBTRIPLEの変数であり、読み書きできます。したがって、setpixelは簡単です:

void set_pixel(int x,int y, RGBTRIPLE color) 
{ 
    image[(bih.biHeight-1-y)*bih.biWidth+x] = color; 
} 

あなたは同じコードは画像の右側の画素を選択するために使用されていることを参照してください。あなたはおそらくconst RGBTRIPLE blue;定数を定義したいと思うでしょう。

0

ファイルが.BMPと仮定します。ピクセルデータとは別に、読み込む必要があるヘッダーもあります。また、ピクセル行は32-bti境界にパディングされています。これをすべて考慮に入れる必要があります。例えば、オンラインのサンプルコード/スニペットを探してください。:

関連する問題