ตามคำสัญญาครับ ทดสอบแล้วครับ ทำงานได้ 100%
[hide=5][code]
#include <stdio.h>
#include <windows.h>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
int writebmp(char * filename,HBITMAP bmp,HDC hDC);
int main(){
ตามคำสัญญาครับ ทดสอบแล้วครับ ทำงานได้ 100%
[hide=5][code]
#include <stdio.h>
#include <windows.h>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
int writebmp(char * filename,HBITMAP bmp,HDC hDC);
int main(){
ลองเปลี่ยนไปใช้จะเร็วขึ้นอีกนิดหนึ่งCode:SetPixelV
แต่ถ้าจะให้ดีกว่านี้ ลองใช้
**Hidden Content: To see this hidden content your post count must be 2 or greater.**
จะได้อ้างถึง memory โดยตรง ซึ่งจะเร็วกว่าเยอะ
ปล
ทำไมต้อง +1 เท่าที่ดู ไม่จำเป็นต้องบวกเพิ่มนะsize.X=bmp.bmWidth+1;
size.Y=bmp.bmHeight+1;
for(int y=0;y<size.Y;y++){ //loop y times
for(int x=0;x<size.X;x++){ //each y loop make x loop x times
[/b]
เขียนแบบนี้ไม่น่าจะ สร้างไฟล์ bmp ได้นะ ทำได้จริงๆเหรอ ?fwrite(&hgraybmp,1,GlobalSize(grayhDC),fp);
[/b]
ปกติต้องมาเขียน Bitmapheader แล้วค่อยตามด้วย palette แล้วค่อยเป็นค่าสี
http://img98.imageshack.us/img98/731/ubd7518fj8.png
XSI - Behavior Programmer
Boardgame Thailand Fanclub
Ball Juggling~
ผมเพิ่งเห็นว่า มันไม่ถูกต้องเหมือนกัน
ต้อขออภัยคนที่เข้ามาดู แก้ใขให้แล้ว
ถูกครับ มันเขียนไม่ได้หรอก ............................
แก้ใขให้แล้ว
อ้อๆ SetPixelV ไม่ได้ช่วยให้เร็วขึ้นครับ
และผมไม่ได้ตั้งใจจะ สอนวิธีการทำงานที่เร็ว แต่ืบทความนี้เพื่อแสดงให้เห็น ... ถึงประโยชน์ อย่างแน่นอน ของการเข้าถึง pixel ของภาพ แล้วเอามาทำ โดยตรง เห็นภาพ แต่
CreateDIBSection กลับต้องใช้ความรู้ในระดับที่ยาก ขึ้นไป ซึ่งทำให้ผู้ซึ่งมาอ่าน ทำความเข้าใจได้โดยยาก โดยเฉพาะคนที่ พื้นฐานอ่อนเกินไป
แต่ผมคิดอย่างนี้ จึงทำ ให้ โค๊ตผมมีความผิดพลาด ใน ส่วนของเขียน bmp ลงไฟล์ เพราะมันไม่จำ้ป็นและการทำดังนั้นก็ยากเพิ่มขึ้นอันอาจจะทำให มั่วได้ ถ้าผมจะเขียน bitmapลงไฟล์ หรือการเปลี่ยนระหว่าง DIB DDB ผมควรจะตั้งกระทู้ใหม่ ไม่ดีกว่าเหรอ
ทั้งนี้ ไม่ได้หมายความว่าผม จะเขียนให้ผู้ซึ่งเพิ่งหัดมาอ่าน เพราะแน่นอนว่า ย่อมนากแก่การทำความเข้าใจ
ขอแค่ concept พอ
แต่ท่าน ก็เป็นผู้ที่มีความรู้ advance อยู่นับว่าหาได้ยากยิ่ง
นิดหนึ่งนะครับ จริงๆแล้วไม่ต้องใช้ GlobalAlloc ก็ได้ แค่ new ธรรมดาก็พอ
GlobalAlloc มันใช้สำหรับจอง memory เพื่อ shared process
ปล จากตัวอย่างที่เขียนมา memory leaked เพียบเลย ถ้าใช้ GlobalAlloc แล้วต้อง GlobalFree ด้วย (ตรงนี้จะ detect ยากนิดหนึ่ง)
แต่ถ้าใช้ new ก็ต้องอย่าลืม delete ซึ่งตรงนี้จะ detect ได้ง่ายว่ามี memory leaked ตรงไหนบ้าง
เขียนภาษา C/C++ ต้องรู้จักรับผิดชอบครับ สร้างแล้วต้องทำลาย ^^
http://img98.imageshack.us/img98/731/ubd7518fj8.png
XSI - Behavior Programmer
Boardgame Thailand Fanclub
Ball Juggling~
กัดผมจริงนะ ท่าน memory leak อีกแล้ว เอาเถอะ แก้ให้
สืบเนื่องจากการใช้ระบบสมัครดังกล่าว ทำให้ชุมชนของเรานั้นมีจำนวนสมาชิกไม่มาก
ซึ่งสามารถจำแนกระดับความสามารถของสมาชิกได้ดังนี้
ทั่วไป: 20%
ชำนาญ: 40%
เชี่ยวชาญ: 30%
เซียน: 10%
ข้อมูลดังกล่าววิเคราะห์ออกมาจากการ Post ของสมาชิกใน boardในหมวดต่างๆ
ซึ่งเห็นได้ว่าชุมชนของเรานั้นมีสมาชิกที่มีความสามารถอยู่สูงมาก อาจกล่าวได้ว่า
เราเป็นแหล่งความรู้แหล่งศึกษาของผู้ที่จริงจังกับศาตร์ต่างๆทางด้านคอมพิวเตอร์ก็ว่าได้
ผมว่าเป็นเรื่องดีครับที่เราได้มีผู้รู้หลายๆคนแบ่งปันต่อยอด
ทุนเดิมที่เรามีอยู่เปรียบเหมือนเราเองเป็นแก้วที่ มีน้ำอยู่ระดับนึงแล้ว
เมื่อมีผู้ที่เชี่ยวชาญกว่ามาแนะนำ(เพิ่มน้ำในแก้่วเรา) ความรู้เราก็เพิ่มพูนไปด้วย
ผมอยากเห็นบรรยากาศแบบนี้มานานแล้วครับ
clone 'em all
ปล ไม่ได้จ้องจับผิด เพียงแต่ คนเรามันพลาดกันได้ ผมเองก็พลาดอยู่บ่อยๆ ^^กัดผมจริงนะ ท่าน memory leak อีกแล้ว เอาเถอะ แก้ให้
[/b]
http://img98.imageshack.us/img98/731/ubd7518fj8.png
XSI - Behavior Programmer
Boardgame Thailand Fanclub
Ball Juggling~
Actions : (View-Readers)
There are no names to display.